mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-21 02:17:42 +01:00
Updated Upstream (Paper)
Upstream has released updates that appears to apply and compile correctly Paper Changes: df0d7b0d Update upstream CB 6ea3c2cf [CI-SKIP] Rebuild patches d7bed4cb Heavily optimise random block ticking (#2914) b66d9ff8 Update upstream CB ba71c5d6 Stop stripping private use block Unicode from signs 28d9dcfc Entity Jump API (#1587) 9976a768 Fix PlayerNaturallySpawnCreaturesEvent boolean inversion 054e20da Clean up imports on ThrownEggHatchEvent a8984ccb Add ThrownEggHatchEvent (#1982) 9f24d495 Allow nerfed blazes, endermen to take water damage (#2847)
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
From dfc3aa2e6ea6503caca1d62421854293475ee6f4 Mon Sep 17 00:00:00 2001
|
||||
From a60d5c4caadfc97a4281961be0be3a014c427fd5 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Thu, 9 May 2019 18:09:43 -0500
|
||||
Subject: [PATCH] Purpur config files
|
||||
@@ -57,7 +57,7 @@ index 349a0ea21..d70c8cab2 100644
|
||||
// Paper end
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 913511388..b737a0f0c 100644
|
||||
index 3c966b4ab..4e8a53d10 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -80,6 +80,8 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
||||
@@ -755,7 +755,7 @@ index 000000000..f8cf4ad23
|
||||
+}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
new file mode 100644
|
||||
index 000000000..6f378b5f6
|
||||
index 000000000..2c8125894
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -0,0 +1,133 @@
|
||||
@@ -779,7 +779,7 @@ index 000000000..6f378b5f6
|
||||
+import java.util.logging.Level;
|
||||
+
|
||||
+public class PurpurConfig {
|
||||
+ private static final int CONFIG_VERSION = 2;
|
||||
+ private static final int CONFIG_VERSION = 3;
|
||||
+ private static final String HEADER = "This is the main configuration file for Purpur.\n"
|
||||
+ + "As you can see, there's tons to configure. Some options may impact gameplay, so use\n"
|
||||
+ + "with caution, and make sure you know what each option does before configuring.\n"
|
||||
@@ -987,7 +987,7 @@ index fc074a66c..daa94187f 100644
|
||||
ignoreVanillaPermissions = commandsConfiguration.getBoolean("ignore-vanilla-permissions");
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
|
||||
index eb5f44e30..7e8b6cab7 100644
|
||||
index af05f3c1e..533cfe738 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
|
||||
@@ -138,6 +138,14 @@ public class Main {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,78 @@
|
||||
From 505b22ce9bd06e098892507d3232b4905f71072d Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 19 Oct 2019 00:52:12 -0500
|
||||
Subject: [PATCH] Logger settings (suppressing pointless logs)
|
||||
|
||||
---
|
||||
.../java/net/minecraft/server/GenericAttributes.java | 1 +
|
||||
.../net/minecraft/server/WorldGenFeatureConfigured.java | 3 ++-
|
||||
src/main/java/net/pl3x/purpur/PurpurConfig.java | 9 +++++++++
|
||||
.../java/org/bukkit/craftbukkit/legacy/CraftLegacy.java | 1 +
|
||||
4 files changed, 13 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/GenericAttributes.java b/src/main/java/net/minecraft/server/GenericAttributes.java
|
||||
index 469e293c2..ca58302cf 100644
|
||||
--- a/src/main/java/net/minecraft/server/GenericAttributes.java
|
||||
+++ b/src/main/java/net/minecraft/server/GenericAttributes.java
|
||||
@@ -79,6 +79,7 @@ public class GenericAttributes {
|
||||
AttributeInstance attributeinstance = attributemapbase.a(nbttagcompound.getString("Name"));
|
||||
|
||||
if (attributeinstance == null) {
|
||||
+ if (!net.pl3x.purpur.PurpurConfig.loggerSuppressUnknownAttributeWarnings) // Purpur
|
||||
GenericAttributes.LOGGER.warn("Ignoring unknown attribute '{}'", nbttagcompound.getString("Name"));
|
||||
} else {
|
||||
a(attributeinstance, nbttagcompound);
|
||||
diff --git a/src/main/java/net/minecraft/server/WorldGenFeatureConfigured.java b/src/main/java/net/minecraft/server/WorldGenFeatureConfigured.java
|
||||
index de8f1874a..1c2320cc5 100644
|
||||
--- a/src/main/java/net/minecraft/server/WorldGenFeatureConfigured.java
|
||||
+++ b/src/main/java/net/minecraft/server/WorldGenFeatureConfigured.java
|
||||
@@ -25,7 +25,7 @@ public class WorldGenFeatureConfigured<FC extends WorldGenFeatureConfiguration,
|
||||
public WorldGenFeatureConfigured<?, ?> a(WorldGenDecoratorConfigured<?> worldgendecoratorconfigured) {
|
||||
WorldGenerator<WorldGenFeatureCompositeConfiguration> worldgenerator = this.b instanceof WorldGenFlowers ? WorldGenerator.DECORATED_FLOWER : WorldGenerator.DECORATED;
|
||||
|
||||
- return worldgenerator.b((WorldGenFeatureConfiguration) (new WorldGenFeatureCompositeConfiguration(this, worldgendecoratorconfigured)));
|
||||
+ return worldgenerator.b(new WorldGenFeatureCompositeConfiguration(this, worldgendecoratorconfigured)); // Purpur - decompile error
|
||||
}
|
||||
|
||||
public WorldGenFeatureRandomChoiceConfigurationWeight<FC> a(float f) {
|
||||
@@ -47,6 +47,7 @@ public class WorldGenFeatureConfigured<FC extends WorldGenFeatureConfiguration,
|
||||
try {
|
||||
return new WorldGenFeatureConfigured<>(worldgenerator, dynamic.get("config").orElseEmptyMap());
|
||||
} catch (RuntimeException runtimeexception) {
|
||||
+ if (!net.pl3x.purpur.PurpurConfig.loggerSuppressWorldGenFeatureDeserializationError) // Purpur
|
||||
WorldGenFeatureConfigured.LOGGER.warn("Error while deserializing {}", s);
|
||||
return new WorldGenFeatureConfigured<>(WorldGenerator.NO_OP, WorldGenFeatureEmptyConfiguration.e);
|
||||
}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index 2c8125894..15458be9d 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -130,4 +130,13 @@ public class PurpurConfig {
|
||||
config.addDefault(path, def);
|
||||
return config.getString(path, config.getString(path));
|
||||
}
|
||||
+
|
||||
+ public static boolean loggerSuppressUnknownAttributeWarnings = false;
|
||||
+ public static boolean loggerSuppressInitLegacyMaterialError = false;
|
||||
+ public static boolean loggerSuppressWorldGenFeatureDeserializationError = false;
|
||||
+ private static void loggerSettings() {
|
||||
+ loggerSuppressUnknownAttributeWarnings = getBoolean("settings.logger.suppress-unknown-attribute-warnings", loggerSuppressUnknownAttributeWarnings);
|
||||
+ loggerSuppressInitLegacyMaterialError = getBoolean("settings.logger.suppress-init-legacy-material-errors", loggerSuppressInitLegacyMaterialError);
|
||||
+ loggerSuppressWorldGenFeatureDeserializationError = getBoolean("settings.logger.suppress-world-gen-feature-deserialization-errors", loggerSuppressWorldGenFeatureDeserializationError);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/legacy/CraftLegacy.java b/src/main/java/org/bukkit/craftbukkit/legacy/CraftLegacy.java
|
||||
index b31e91150..756786acc 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/legacy/CraftLegacy.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/legacy/CraftLegacy.java
|
||||
@@ -254,6 +254,7 @@ public final class CraftLegacy {
|
||||
}
|
||||
|
||||
static {
|
||||
+ if (!net.pl3x.purpur.PurpurConfig.loggerSuppressInitLegacyMaterialError) // Purpur
|
||||
System.err.println("Initializing Legacy Material Support. Unless you have legacy plugins and/or data this is a bug!");
|
||||
if (MinecraftServer.getServer() != null && MinecraftServer.getServer().isDebugging()) {
|
||||
new Exception().printStackTrace();
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From 8be74ef793ffcd377ddebaa4a23f47fe11ea68ed Mon Sep 17 00:00:00 2001
|
||||
From e4c12c793366f2255c8d4597eca02cb497978206 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
||||
Date: Sun, 15 Dec 2019 12:53:59 -0600
|
||||
Subject: [PATCH] Disable outdated build check
|
||||
@@ -8,7 +8,7 @@ Subject: [PATCH] Disable outdated build check
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
|
||||
index 7e8b6cab7..fd0748582 100644
|
||||
index 533cfe738..2278cf716 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
|
||||
@@ -220,7 +220,7 @@ public class Main {
|
||||
@@ -1,4 +1,4 @@
|
||||
From e73415b5d39a42a222870c3be5d3d27802d2a762 Mon Sep 17 00:00:00 2001
|
||||
From 567c3758d8780d1a51af541d6d9758df8164ae1a Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
||||
Date: Wed, 1 Jan 2020 20:12:39 -0600
|
||||
Subject: [PATCH] Add obfhelpers for plugin use
|
||||
@@ -30,10 +30,10 @@ index fb97c51bb..50ed4001d 100644
|
||||
return IChatBaseComponent.ChatSerializer.a.toJson(ichatbasecomponent);
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java
|
||||
index e9801022e..6cc8157a0 100644
|
||||
index d6e43313b..4730c2beb 100644
|
||||
--- a/src/main/java/net/minecraft/server/ItemStack.java
|
||||
+++ b/src/main/java/net/minecraft/server/ItemStack.java
|
||||
@@ -616,6 +616,7 @@ public final class ItemStack {
|
||||
@@ -595,6 +595,7 @@ public final class ItemStack {
|
||||
return this.tag;
|
||||
}
|
||||
|
||||
@@ -1,86 +0,0 @@
|
||||
From aedad81d1950f053f3b8e58cb61a1d1089f3a86c Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Fri, 3 May 2019 23:58:44 -0500
|
||||
Subject: [PATCH] Snowman set pumpkin on/off by player interaction
|
||||
|
||||
---
|
||||
.../net/minecraft/server/EntitySnowman.java | 37 ++++++++++---------
|
||||
.../java/net/pl3x/purpur/PurpurConfig.java | 7 ++++
|
||||
2 files changed, 27 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntitySnowman.java b/src/main/java/net/minecraft/server/EntitySnowman.java
|
||||
index 07ca1a498..54404dd4b 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntitySnowman.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntitySnowman.java
|
||||
@@ -8,6 +8,7 @@ import org.bukkit.event.player.PlayerShearEntityEvent;
|
||||
|
||||
public class EntitySnowman extends EntityGolem implements IRangedEntity {
|
||||
|
||||
+ private static final RecipeItemStack PUMPKIN = RecipeItemStack.a(Blocks.PUMPKIN.getItem(), Blocks.CARVED_PUMPKIN.getItem(), Blocks.JACK_O_LANTERN.getItem()); // Purpur
|
||||
private static final DataWatcherObject<Byte> b = DataWatcher.a(EntitySnowman.class, DataWatcherRegistry.a);
|
||||
|
||||
public EntitySnowman(EntityTypes<? extends EntitySnowman> entitytypes, World world) {
|
||||
@@ -113,25 +114,27 @@ public class EntitySnowman extends EntityGolem implements IRangedEntity {
|
||||
ItemStack itemstack = entityhuman.b(enumhand);
|
||||
|
||||
if (itemstack.getItem() == Items.SHEARS && this.hasPumpkin()) {
|
||||
- if (!this.world.isClientSide) {
|
||||
- // CraftBukkit start
|
||||
- PlayerShearEntityEvent event = new PlayerShearEntityEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), this.getBukkitEntity());
|
||||
- this.world.getServer().getPluginManager().callEvent(event);
|
||||
-
|
||||
- if (event.isCancelled()) {
|
||||
- return false;
|
||||
- }
|
||||
- // CraftBukkit end
|
||||
- this.setHasPumpkin(false);
|
||||
- itemstack.damage(1, entityhuman, (entityhuman1) -> {
|
||||
- entityhuman1.broadcastItemBreak(enumhand);
|
||||
- });
|
||||
+ // Purpur start
|
||||
+ if (!new PlayerShearEntityEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), this.getBukkitEntity()).callEvent()) return false; // CraftBukkit
|
||||
+
|
||||
+ setHasPumpkin(false);
|
||||
+ itemstack.damage(1, entityhuman, (entityhuman1) -> {
|
||||
+ entityhuman1.broadcastItemBreak(enumhand);
|
||||
+ });
|
||||
+
|
||||
+ if (net.pl3x.purpur.PurpurConfig.snowmanDropsPumpkin) {
|
||||
+ EntityItem pumpkin = new EntityItem(world, locX(), locY(), locZ(), new ItemStack(Blocks.CARVED_PUMPKIN.getItem()));
|
||||
+ pumpkin.pickupDelay = 10;
|
||||
+ world.addEntity(pumpkin);
|
||||
+ }
|
||||
+ } else if (net.pl3x.purpur.PurpurConfig.snowmanPumpkinPutBack && !hasPumpkin() && PUMPKIN.test(itemstack)) {
|
||||
+ setHasPumpkin(true);
|
||||
+ if (!entityhuman.abilities.canInstantlyBuild) {
|
||||
+ itemstack.subtract(1);
|
||||
}
|
||||
-
|
||||
- return true;
|
||||
- } else {
|
||||
- return false;
|
||||
}
|
||||
+ return true;
|
||||
+ // Purpur end
|
||||
}
|
||||
|
||||
public boolean hasPumpkin() {
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index 26e95035b..0c408a10c 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -135,4 +135,11 @@ public class PurpurConfig {
|
||||
private static void cowsSettings() {
|
||||
feedMushroomsToCows = getInt("settings.mobs.cow.feed-mushrooms-for-mooshroom", feedMushroomsToCows);
|
||||
}
|
||||
+
|
||||
+ public static boolean snowmanDropsPumpkin = false;
|
||||
+ public static boolean snowmanPumpkinPutBack = false;
|
||||
+ private static void snowmansSettings() {
|
||||
+ snowmanDropsPumpkin = getBoolean("settings.mobs.snow_golem.drops-pumpkin-when-sheared", snowmanDropsPumpkin);
|
||||
+ snowmanPumpkinPutBack = getBoolean("settings.mobs.snow_golem.pumpkin-can-be-added-back", snowmanPumpkinPutBack);
|
||||
+ }
|
||||
}
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,19 +1,16 @@
|
||||
From 37fc918ff51a18259c863ec7b2185c7e5e70b996 Mon Sep 17 00:00:00 2001
|
||||
From b050b6599be26debdb0331044bcc0b6f326f0b9e Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Thu, 9 May 2019 14:27:37 -0500
|
||||
Subject: [PATCH] Silk touch spawners
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/Block.java | 1 +
|
||||
.../net/minecraft/server/BlockMobSpawner.java | 35 +++++++++++++++++++
|
||||
.../net/minecraft/server/EntityTypes.java | 14 ++++++++
|
||||
.../net/minecraft/server/ItemSpawner.java | 23 ++++++++++++
|
||||
src/main/java/net/minecraft/server/Items.java | 2 +-
|
||||
5 files changed, 74 insertions(+), 1 deletion(-)
|
||||
create mode 100644 src/main/java/net/minecraft/server/ItemSpawner.java
|
||||
.../net/minecraft/server/BlockMobSpawner.java | 34 +++++++++++++++++++
|
||||
.../net/minecraft/server/EntityTypes.java | 12 +++++++
|
||||
3 files changed, 47 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Block.java b/src/main/java/net/minecraft/server/Block.java
|
||||
index 54a61283e6..4d29faccaa 100644
|
||||
index e40375b67..b29ed1cfa 100644
|
||||
--- a/src/main/java/net/minecraft/server/Block.java
|
||||
+++ b/src/main/java/net/minecraft/server/Block.java
|
||||
@@ -494,6 +494,7 @@ public class Block implements IMaterial {
|
||||
@@ -25,7 +22,7 @@ index 54a61283e6..4d29faccaa 100644
|
||||
if (!world.isClientSide && !itemstack.isEmpty() && world.getGameRules().getBoolean(GameRules.DO_TILE_DROPS)) {
|
||||
float f = 0.5F;
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockMobSpawner.java b/src/main/java/net/minecraft/server/BlockMobSpawner.java
|
||||
index 5296fdf168..901d45f284 100644
|
||||
index 5296fdf16..69d04f6cb 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockMobSpawner.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockMobSpawner.java
|
||||
@@ -11,6 +11,40 @@ public class BlockMobSpawner extends BlockTileEntity {
|
||||
@@ -69,16 +66,8 @@ index 5296fdf168..901d45f284 100644
|
||||
@Override
|
||||
public void dropNaturally(IBlockData iblockdata, World world, BlockPosition blockposition, ItemStack itemstack) {
|
||||
super.dropNaturally(iblockdata, world, blockposition, itemstack);
|
||||
@@ -23,6 +57,7 @@ public class BlockMobSpawner extends BlockTileEntity {
|
||||
|
||||
@Override
|
||||
public int getExpDrop(IBlockData iblockdata, World world, BlockPosition blockposition, ItemStack itemstack) {
|
||||
+ if (isSilkTouch(itemstack)) return 0; // Purpur
|
||||
int i = 15 + world.random.nextInt(15) + world.random.nextInt(15);
|
||||
|
||||
return i;
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityTypes.java b/src/main/java/net/minecraft/server/EntityTypes.java
|
||||
index 2fb04e3e93..dcba6d6c89 100644
|
||||
index a0d932c40..0dd9897b9 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityTypes.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityTypes.java
|
||||
@@ -136,10 +136,17 @@ public class EntityTypes<T extends Entity> {
|
||||
@@ -99,20 +88,18 @@ index 2fb04e3e93..dcba6d6c89 100644
|
||||
public static Optional<EntityTypes<?>> a(String s) {
|
||||
return IRegistry.ENTITY_TYPE.getOptional(MinecraftKey.a(s));
|
||||
}
|
||||
@@ -259,6 +266,12 @@ public class EntityTypes<T extends Entity> {
|
||||
return this.bb;
|
||||
@@ -263,6 +270,10 @@ public class EntityTypes<T extends Entity> {
|
||||
public String getName() {
|
||||
return IRegistry.ENTITY_TYPE.getKey(this).getKey();
|
||||
}
|
||||
|
||||
+ // Purpur start
|
||||
+
|
||||
+ public String getTranslatedName() {
|
||||
+ return getNameComponent().getString();
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
// Purpur end
|
||||
|
||||
public String f() {
|
||||
if (this.bg == null) {
|
||||
this.bg = SystemUtils.a("entity", IRegistry.ENTITY_TYPE.getKey(this));
|
||||
@@ -267,6 +280,7 @@ public class EntityTypes<T extends Entity> {
|
||||
@@ -273,6 +284,7 @@ public class EntityTypes<T extends Entity> {
|
||||
return this.bg;
|
||||
}
|
||||
|
||||
@@ -120,48 +107,6 @@ index 2fb04e3e93..dcba6d6c89 100644
|
||||
public IChatBaseComponent g() {
|
||||
if (this.bh == null) {
|
||||
this.bh = new ChatMessage(this.f(), new Object[0]);
|
||||
diff --git a/src/main/java/net/minecraft/server/ItemSpawner.java b/src/main/java/net/minecraft/server/ItemSpawner.java
|
||||
new file mode 100644
|
||||
index 0000000000..7dc68ffe92
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/net/minecraft/server/ItemSpawner.java
|
||||
@@ -0,0 +1,23 @@
|
||||
+package net.minecraft.server;
|
||||
+
|
||||
+public class ItemSpawner extends ItemBlock {
|
||||
+ public ItemSpawner(Block block, Info info) {
|
||||
+ super(block, info);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ protected boolean a(BlockPosition blockposition, World world, EntityHuman entityhuman, ItemStack itemstack, IBlockData iblockdata) {
|
||||
+ boolean handled = super.a(blockposition, world, entityhuman, itemstack, iblockdata);
|
||||
+ if (entityhuman.getBukkitEntity().hasPermission("purpur.place.spawners")) {
|
||||
+ TileEntity spawner = world.getTileEntity(blockposition);
|
||||
+ if (spawner instanceof TileEntityMobSpawner && itemstack.hasTag()) {
|
||||
+ NBTTagCompound tag = itemstack.getTag();
|
||||
+ if (tag.hasKey("Purpur.mob_type")) {
|
||||
+ EntityTypes.getType(tag.getString("Purpur.mob_type")).ifPresent(type ->
|
||||
+ ((TileEntityMobSpawner) spawner).getSpawner().setMobName(type));
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ return handled;
|
||||
+ }
|
||||
+}
|
||||
diff --git a/src/main/java/net/minecraft/server/Items.java b/src/main/java/net/minecraft/server/Items.java
|
||||
index 54670f64cf..282fbca4fc 100644
|
||||
--- a/src/main/java/net/minecraft/server/Items.java
|
||||
+++ b/src/main/java/net/minecraft/server/Items.java
|
||||
@@ -155,7 +155,7 @@ public class Items {
|
||||
public static final Item bU = a(Blocks.PURPUR_BLOCK, CreativeModeTab.b);
|
||||
public static final Item bV = a(Blocks.PURPUR_PILLAR, CreativeModeTab.b);
|
||||
public static final Item bW = a(Blocks.PURPUR_STAIRS, CreativeModeTab.b);
|
||||
- public static final Item bX = a(Blocks.SPAWNER);
|
||||
+ public static final Item bX = a(Blocks.SPAWNER, new ItemSpawner(Blocks.SPAWNER, new Item.Info().a(EnumItemRarity.EPIC))); // Purpur
|
||||
public static final Item bY = a(Blocks.OAK_STAIRS, CreativeModeTab.b);
|
||||
public static final Item bZ = a(Blocks.CHEST, CreativeModeTab.c);
|
||||
public static final Item ca = a(Blocks.DIAMOND_ORE, CreativeModeTab.b);
|
||||
--
|
||||
2.24.0.rc1
|
||||
2.24.0
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
From 14e75a22b2727e6dee6075860a42f6855535490d Mon Sep 17 00:00:00 2001
|
||||
From 3be371c521916516fcd485e69ba2ab29ce7d4aa4 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sun, 12 May 2019 00:43:12 -0500
|
||||
Subject: [PATCH] Make giants naturally spawn and have AI
|
||||
Subject: [PATCH] Giants naturally spawn and have AI
|
||||
|
||||
---
|
||||
.../java/net/minecraft/server/BiomeBase.java | 1 +
|
||||
.../java/net/minecraft/server/Biomes.java | 25 ++++++++++++
|
||||
.../minecraft/server/EntityGiantZombie.java | 39 +++++++++++++++++--
|
||||
.../java/net/minecraft/server/Biomes.java | 6 ++
|
||||
.../minecraft/server/EntityGiantZombie.java | 68 +++++++++++++++++--
|
||||
.../minecraft/server/EntityInsentient.java | 2 +
|
||||
.../net/minecraft/server/SpawnerCreature.java | 8 ++++
|
||||
.../java/net/pl3x/purpur/PurpurConfig.java | 7 ++++
|
||||
6 files changed, 78 insertions(+), 4 deletions(-)
|
||||
.../net/minecraft/server/SpawnerCreature.java | 8 +++
|
||||
.../net/pl3x/purpur/PurpurWorldConfig.java | 12 ++++
|
||||
6 files changed, 93 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BiomeBase.java b/src/main/java/net/minecraft/server/BiomeBase.java
|
||||
index 0102a170d..963709846 100644
|
||||
@@ -25,79 +25,47 @@ index 0102a170d..963709846 100644
|
||||
((List) this.v.get(enumcreaturetype)).add(biomebase_biomemeta);
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/Biomes.java b/src/main/java/net/minecraft/server/Biomes.java
|
||||
index 12742870c..d1f8695fe 100644
|
||||
index 12742870c..749016a1c 100644
|
||||
--- a/src/main/java/net/minecraft/server/Biomes.java
|
||||
+++ b/src/main/java/net/minecraft/server/Biomes.java
|
||||
@@ -92,5 +92,30 @@ public abstract class Biomes {
|
||||
|
||||
@@ -93,4 +93,10 @@ public abstract class Biomes {
|
||||
static {
|
||||
Collections.addAll(BiomeBase.b, new BiomeBase[]{Biomes.OCEAN, Biomes.PLAINS, Biomes.DESERT, Biomes.MOUNTAINS, Biomes.FOREST, Biomes.TAIGA, Biomes.SWAMP, Biomes.RIVER, Biomes.FROZEN_RIVER, Biomes.SNOWY_TUNDRA, Biomes.SNOWY_MOUNTAINS, Biomes.MUSHROOM_FIELDS, Biomes.MUSHROOM_FIELD_SHORE, Biomes.BEACH, Biomes.DESERT_HILLS, Biomes.WOODED_HILLS, Biomes.TAIGA_HILLS, Biomes.JUNGLE, Biomes.JUNGLE_HILLS, Biomes.JUNGLE_EDGE, Biomes.DEEP_OCEAN, Biomes.STONE_SHORE, Biomes.SNOWY_BEACH, Biomes.BIRCH_FOREST, Biomes.BIRCH_FOREST_HILLS, Biomes.DARK_FOREST, Biomes.SNOWY_TAIGA, Biomes.SNOWY_TAIGA_HILLS, Biomes.GIANT_TREE_TAIGA, Biomes.GIANT_TREE_TAIGA_HILLS, Biomes.WOODED_MOUNTAINS, Biomes.SAVANNA, Biomes.SAVANNA_PLATEAU, Biomes.BADLANDS, Biomes.WOODED_BADLANDS_PLATEAU, Biomes.BADLANDS_PLATEAU});
|
||||
+
|
||||
+ // Purpur start - add natural mob spawns (maybe find a better place for this?)
|
||||
+ if (net.pl3x.purpur.PurpurConfig.giantsNaturallySpawn) {
|
||||
+ addSpawn("plains", EnumCreatureType.MONSTER, EntityTypes.GIANT, 5, 1, 1);
|
||||
+ addSpawn("sunflower_plains", EnumCreatureType.MONSTER, EntityTypes.GIANT, 5, 1, 1);
|
||||
+ addSpawn("desert", EnumCreatureType.MONSTER, EntityTypes.GIANT, 2, 1, 1);
|
||||
+ addSpawn("desert_hills", EnumCreatureType.MONSTER, EntityTypes.GIANT, 2, 1, 1);
|
||||
+ addSpawn("desert_lakes", EnumCreatureType.MONSTER, EntityTypes.GIANT, 2, 1, 1);
|
||||
+ addSpawn("mountains", EnumCreatureType.MONSTER, EntityTypes.GIANT, 5, 1, 1);
|
||||
+ addSpawn("gravelly_mountains", EnumCreatureType.MONSTER, EntityTypes.GIANT, 5, 1, 1);
|
||||
+ addSpawn("modified_gravelly_mountains", EnumCreatureType.MONSTER, EntityTypes.GIANT, 5, 1, 1);
|
||||
+ addSpawn("savanna", EnumCreatureType.MONSTER, EntityTypes.GIANT, 5, 1, 1);
|
||||
+ addSpawn("savanna_plateau", EnumCreatureType.MONSTER, EntityTypes.GIANT, 5, 1, 1);
|
||||
+ addSpawn("shattered_savanna", EnumCreatureType.MONSTER, EntityTypes.GIANT, 5, 1, 1);
|
||||
+ addSpawn("shattered_savanna_plateau", EnumCreatureType.MONSTER, EntityTypes.GIANT, 5, 1, 1);
|
||||
+ addSpawn("badlands", EnumCreatureType.MONSTER, EntityTypes.GIANT, 10, 1, 1);
|
||||
+ addSpawn("badlands_plateau", EnumCreatureType.MONSTER, EntityTypes.GIANT, 10, 1, 1);
|
||||
+ addSpawn("eroded_badlands", EnumCreatureType.MONSTER, EntityTypes.GIANT, 10, 1, 1);
|
||||
+ addSpawn("modified_badlands_plateau", EnumCreatureType.MONSTER, EntityTypes.GIANT, 10, 1, 1);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ private static void addSpawn(String biome, EnumCreatureType ct, EntityTypes et, int weight, int min_group, int max_group) {
|
||||
+ IRegistry.BIOME.get(new MinecraftKey(biome)).addMobSpawn(ct, new BiomeBase.BiomeMeta(et, weight, min_group, max_group));
|
||||
}
|
||||
+
|
||||
+ // Purpur start
|
||||
+ public static void addSpawn(String biome, EnumCreatureType ct, EntityTypes et, int weight, int min_group, int max_group) {
|
||||
+ IRegistry.BIOME.get(new MinecraftKey(biome)).addMobSpawn(ct, new BiomeBase.BiomeMeta(et, weight, min_group, max_group));
|
||||
+ }
|
||||
+ // Purpur end
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityGiantZombie.java b/src/main/java/net/minecraft/server/EntityGiantZombie.java
|
||||
index 12a96750c..4aaf4ea6c 100644
|
||||
index ff8a41a53..d132a6105 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityGiantZombie.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityGiantZombie.java
|
||||
@@ -21,14 +21,27 @@ public class EntityGiantZombie extends EntityMonster {
|
||||
super.initAttributes();
|
||||
this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(100.0D);
|
||||
this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(0.5D);
|
||||
- this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue(50.0D);
|
||||
+ this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue(12.0D); // Purpur - match ravager damage
|
||||
@@ -23,6 +23,45 @@ public class EntityGiantZombie extends EntityMonster {
|
||||
return world.purpurConfig.giantRequireShiftToMount;
|
||||
}
|
||||
|
||||
// Purpur start
|
||||
@Override
|
||||
protected void initPathfinder() {
|
||||
- this.goalSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
|
||||
- this.targetSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
|
||||
+ if (net.pl3x.purpur.PurpurConfig.giantsHaveAI) {
|
||||
+ protected void initPathfinder() {
|
||||
+ if (world.purpurConfig.giantHaveAI) {
|
||||
+ this.goalSelector.a(0, new PathfinderGoalFloat(this));
|
||||
+ this.goalSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
|
||||
+ this.goalSelector.a(2, new PathfinderGoalMeleeAttack(this, 1.0D, false));
|
||||
+ this.goalSelector.a(7, new PathfinderGoalRandomStrollLand(this, 1.0D));
|
||||
+ this.goalSelector.a(8, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 16.0F));
|
||||
+ this.goalSelector.a(8, new PathfinderGoalRandomLookaround(this));
|
||||
+ this.goalSelector.a(5, new PathfinderGoalMoveTowardsRestriction(this, 1.0D));
|
||||
+ this.targetSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
|
||||
+ this.targetSelector.a(1, new PathfinderGoalHurtByTarget(this).a(EntityPigZombie.class));
|
||||
+ this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, true));
|
||||
+ this.targetSelector.a(3, new PathfinderGoalNearestAttackableTarget<>(this, EntityVillager.class, false));
|
||||
+ this.targetSelector.a(4, new PathfinderGoalNearestAttackableTarget<>(this, EntityIronGolem.class, true));
|
||||
+ this.targetSelector.a(5, new PathfinderGoalNearestAttackableTarget<>(this, EntityTurtle.class, true));
|
||||
+ if (world.purpurConfig.giantHaveHostileAI) {
|
||||
+ this.goalSelector.a(2, new PathfinderGoalMeleeAttack(this, 1.0D, false));
|
||||
+ this.targetSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
|
||||
+ this.targetSelector.a(1, new PathfinderGoalHurtByTarget(this).a(EntityPigZombie.class));
|
||||
+ this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, true));
|
||||
+ this.targetSelector.a(3, new PathfinderGoalNearestAttackableTarget<>(this, EntityVillager.class, false));
|
||||
+ this.targetSelector.a(4, new PathfinderGoalNearestAttackableTarget<>(this, EntityIronGolem.class, true));
|
||||
+ this.targetSelector.a(5, new PathfinderGoalNearestAttackableTarget<>(this, EntityTurtle.class, true));
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -37,10 +50,28 @@ public class EntityGiantZombie extends EntityMonster {
|
||||
// 1.0 makes bottom of feet about as high as their waist when they jump
|
||||
return 1.0F;
|
||||
}
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public GroupDataEntity prepare(GeneratorAccess world, DifficultyDamageScaler difficulty, EnumMobSpawn enummobspawn, GroupDataEntity groupDataEntity, NBTTagCompound nbt) {
|
||||
@@ -112,23 +80,59 @@ index 12a96750c..4aaf4ea6c 100644
|
||||
+ @Override
|
||||
+ protected void setEquipmentBasedOnDifficulty(DifficultyDamageScaler difficulty) {
|
||||
+ super.setEquipmentBasedOnDifficulty(difficulty);
|
||||
+ // TODO make configurable
|
||||
+ if (random.nextFloat() < (world.getDifficulty() == EnumDifficulty.HARD ? 0.1F : 0.05F)) {
|
||||
+ setSlot(EnumItemSlot.MAINHAND, new ItemStack(Items.IRON_SWORD));
|
||||
+ }
|
||||
+ }
|
||||
// Purpur end
|
||||
+
|
||||
@Override
|
||||
public float getJumpHeight() {
|
||||
// make giants jump as high as everything else relative to their size
|
||||
@@ -39,13 +78,34 @@ public class EntityGiantZombie extends EntityMonster {
|
||||
@Override
|
||||
protected void initAttributes() {
|
||||
super.initAttributes();
|
||||
- this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(100.0D);
|
||||
- this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(0.5D);
|
||||
- this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue(50.0D);
|
||||
+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.giantMaxHealth); // Purpur
|
||||
+ this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(world.purpurConfig.giantMovementSpeed); // Purpur
|
||||
+ this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue(world.purpurConfig.giantAttackDamage); // Purpur
|
||||
}
|
||||
|
||||
@Override
|
||||
public float a(BlockPosition blockposition, IWorldReader iworldreader) {
|
||||
- return iworldreader.w(blockposition) - 0.5F;
|
||||
+ return super.a(blockposition, iworldreader); // Purpur - fix light requirements for natural spawns
|
||||
}
|
||||
+
|
||||
+ // Purpur start - TODO make configurable
|
||||
+ static {
|
||||
+ Biomes.addSpawn("plains", EnumCreatureType.MONSTER, EntityTypes.GIANT, 5, 1, 1);
|
||||
+ Biomes.addSpawn("sunflower_plains", EnumCreatureType.MONSTER, EntityTypes.GIANT, 5, 1, 1);
|
||||
+ Biomes.addSpawn("desert", EnumCreatureType.MONSTER, EntityTypes.GIANT, 2, 1, 1);
|
||||
+ Biomes.addSpawn("desert_hills", EnumCreatureType.MONSTER, EntityTypes.GIANT, 2, 1, 1);
|
||||
+ Biomes.addSpawn("desert_lakes", EnumCreatureType.MONSTER, EntityTypes.GIANT, 2, 1, 1);
|
||||
+ Biomes.addSpawn("mountains", EnumCreatureType.MONSTER, EntityTypes.GIANT, 5, 1, 1);
|
||||
+ Biomes.addSpawn("gravelly_mountains", EnumCreatureType.MONSTER, EntityTypes.GIANT, 5, 1, 1);
|
||||
+ Biomes.addSpawn("modified_gravelly_mountains", EnumCreatureType.MONSTER, EntityTypes.GIANT, 5, 1, 1);
|
||||
+ Biomes.addSpawn("savanna", EnumCreatureType.MONSTER, EntityTypes.GIANT, 5, 1, 1);
|
||||
+ Biomes.addSpawn("savanna_plateau", EnumCreatureType.MONSTER, EntityTypes.GIANT, 5, 1, 1);
|
||||
+ Biomes.addSpawn("shattered_savanna", EnumCreatureType.MONSTER, EntityTypes.GIANT, 5, 1, 1);
|
||||
+ Biomes.addSpawn("shattered_savanna_plateau", EnumCreatureType.MONSTER, EntityTypes.GIANT, 5, 1, 1);
|
||||
+ Biomes.addSpawn("badlands", EnumCreatureType.MONSTER, EntityTypes.GIANT, 10, 1, 1);
|
||||
+ Biomes.addSpawn("badlands_plateau", EnumCreatureType.MONSTER, EntityTypes.GIANT, 10, 1, 1);
|
||||
+ Biomes.addSpawn("eroded_badlands", EnumCreatureType.MONSTER, EntityTypes.GIANT, 10, 1, 1);
|
||||
+ Biomes.addSpawn("modified_badlands_plateau", EnumCreatureType.MONSTER, EntityTypes.GIANT, 10, 1, 1);
|
||||
+ }
|
||||
+ // Purpur end
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java
|
||||
index 9aafac6db..89b45da1b 100644
|
||||
index b25ebcfd9..d1b4a2280 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityInsentient.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityInsentient.java
|
||||
@@ -868,6 +868,7 @@ public abstract class EntityInsentient extends EntityLiving {
|
||||
@@ -863,6 +863,7 @@ public abstract class EntityInsentient extends EntityLiving {
|
||||
return f;
|
||||
}
|
||||
|
||||
@@ -136,7 +140,7 @@ index 9aafac6db..89b45da1b 100644
|
||||
protected void a(DifficultyDamageScaler difficultydamagescaler) {
|
||||
if (this.random.nextFloat() < 0.15F * difficultydamagescaler.d()) {
|
||||
int i = this.random.nextInt(2);
|
||||
@@ -975,6 +976,7 @@ public abstract class EntityInsentient extends EntityLiving {
|
||||
@@ -970,6 +971,7 @@ public abstract class EntityInsentient extends EntityLiving {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -145,7 +149,7 @@ index 9aafac6db..89b45da1b 100644
|
||||
float f = difficultydamagescaler.d();
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/SpawnerCreature.java b/src/main/java/net/minecraft/server/SpawnerCreature.java
|
||||
index 58bbf2f9d..53d590041 100644
|
||||
index 58bbf2f9d..71920d7f8 100644
|
||||
--- a/src/main/java/net/minecraft/server/SpawnerCreature.java
|
||||
+++ b/src/main/java/net/minecraft/server/SpawnerCreature.java
|
||||
@@ -77,6 +77,14 @@ public final class SpawnerCreature {
|
||||
@@ -154,7 +158,7 @@ index 58bbf2f9d..53d590041 100644
|
||||
|
||||
+ // Purpur start
|
||||
+ if (entitytypes == EntityTypes.GIANT) {
|
||||
+ if (!net.pl3x.purpur.PurpurConfig.giantsNaturallySpawn) {
|
||||
+ if (!worldserver.purpurConfig.giantNaturallySpawn) {
|
||||
+ return i;
|
||||
+ }
|
||||
+ }
|
||||
@@ -163,24 +167,35 @@ index 58bbf2f9d..53d590041 100644
|
||||
if (entitytypes.b() && a(chunkgenerator, enumcreaturetype, biomebase_biomemeta, (BlockPosition) blockposition_mutableblockposition)) {
|
||||
EntityPositionTypes.Surface entitypositiontypes_surface = EntityPositionTypes.a(entitytypes);
|
||||
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index c4955fae6..d7da38bf5 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -141,6 +141,13 @@ public class PurpurConfig {
|
||||
feedMushroomsToCows = getInt("settings.mobs.cow.feed-mushrooms-for-mooshroom", feedMushroomsToCows);
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index a61999063..8cdcca3bd 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -242,12 +242,24 @@ public class PurpurWorldConfig {
|
||||
public boolean giantRequireShiftToMount = true;
|
||||
public float giantStepHeight = 2.0F;
|
||||
public float giantJumpHeight = 1.0F;
|
||||
+ public double giantMaxHealth = 100.0D;
|
||||
+ public double giantMovementSpeed = 0.5D;
|
||||
+ public double giantAttackDamage = 50.0D;
|
||||
+ public boolean giantNaturallySpawn = false;
|
||||
+ public boolean giantHaveAI = false;
|
||||
+ public boolean giantHaveHostileAI = false;
|
||||
private void giantSettings() {
|
||||
giantRidable = getBoolean("mobs.giant.ridable", giantRidable);
|
||||
giantRidableInWater = getBoolean("mobs.giant.ridable-in-water", giantRidableInWater);
|
||||
giantRequireShiftToMount = getBoolean("mobs.giant.require-shift-to-mount", giantRequireShiftToMount);
|
||||
giantStepHeight = (float) getDouble("mobs.giant.step-height", giantStepHeight);
|
||||
giantJumpHeight = (float) getDouble("mobs.giant.jump-height", giantJumpHeight);
|
||||
+ giantMaxHealth = getDouble("mobs.giant.max-health", giantMaxHealth);
|
||||
+ giantMovementSpeed = getDouble("mobs.giant.movement-speed", giantMovementSpeed);
|
||||
+ giantAttackDamage = getDouble("mobs.giant.attack-damage", giantAttackDamage);
|
||||
+ giantNaturallySpawn = getBoolean("mobs.giant.naturally-spawn", giantNaturallySpawn);
|
||||
+ giantHaveAI = getBoolean("mobs.giant.have-ai", giantHaveAI);
|
||||
+ giantHaveHostileAI = getBoolean("mobs.giant.have-hostile-ai", giantHaveHostileAI);
|
||||
}
|
||||
|
||||
+ public static boolean giantsNaturallySpawn = true;
|
||||
+ public static boolean giantsHaveAI = true;
|
||||
+ private static void giantsSettings() {
|
||||
+ giantsNaturallySpawn = getBoolean("settings.mobs.giant.naturally-spawn", giantsNaturallySpawn);
|
||||
+ giantsHaveAI = getBoolean("settings.mobs.giant.have-ai", giantsHaveAI);
|
||||
+ }
|
||||
+
|
||||
public static double crystalsAttackPhantomsRadius = 0.0D;
|
||||
public static float crystalsAttackPhantomDamage = 1.0F;
|
||||
public static double phantomsOrbitCrystalsRadius = 0.0D;
|
||||
public boolean guardianRidable = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
95
patches/server/0009-Illusioners-naturally-spawn.patch
Normal file
95
patches/server/0009-Illusioners-naturally-spawn.patch
Normal file
@@ -0,0 +1,95 @@
|
||||
From 939a05a47fad8fee743409e57cf78a26a1f3bae3 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Fri, 5 Jul 2019 11:09:25 -0500
|
||||
Subject: [PATCH] Illusioners naturally spawn
|
||||
|
||||
---
|
||||
.../server/EntityIllagerIllusioner.java | 27 ++++++++++++++++---
|
||||
.../net/minecraft/server/SpawnerCreature.java | 4 +++
|
||||
.../net/pl3x/purpur/PurpurWorldConfig.java | 8 ++++++
|
||||
3 files changed, 36 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java b/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java
|
||||
index 3e6722cfc..9af93c636 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java
|
||||
@@ -58,9 +58,9 @@ public class EntityIllagerIllusioner extends EntityIllagerWizard implements IRan
|
||||
@Override
|
||||
protected void initAttributes() {
|
||||
super.initAttributes();
|
||||
- this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(0.5D);
|
||||
- this.getAttributeInstance(GenericAttributes.FOLLOW_RANGE).setValue(18.0D);
|
||||
- this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(32.0D);
|
||||
+ this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(world.purpurConfig.illusionerMovementSpeed); // Purpur
|
||||
+ this.getAttributeInstance(GenericAttributes.FOLLOW_RANGE).setValue(world.purpurConfig.illusionerFollowRange); // Purpur
|
||||
+ this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(world.purpurConfig.illusionerMaxHealth); // Purpur
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -253,4 +253,25 @@ public class EntityIllagerIllusioner extends EntityIllagerWizard implements IRan
|
||||
return EntityIllagerWizard.Spell.DISAPPEAR;
|
||||
}
|
||||
}
|
||||
+
|
||||
+ // Purpur start
|
||||
+ static {
|
||||
+ Biomes.addSpawn("plains", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ Biomes.addSpawn("sunflower_plains", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ Biomes.addSpawn("desert", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ Biomes.addSpawn("desert_hills", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ Biomes.addSpawn("desert_lakes", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ Biomes.addSpawn("mountains", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ Biomes.addSpawn("gravelly_mountains", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ Biomes.addSpawn("modified_gravelly_mountains", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ Biomes.addSpawn("savanna", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ Biomes.addSpawn("savanna_plateau", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ Biomes.addSpawn("shattered_savanna", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ Biomes.addSpawn("shattered_savanna_plateau", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ Biomes.addSpawn("badlands", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 10, 1, 1);
|
||||
+ Biomes.addSpawn("badlands_plateau", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 10, 1, 1);
|
||||
+ Biomes.addSpawn("eroded_badlands", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 10, 1, 1);
|
||||
+ Biomes.addSpawn("modified_badlands_plateau", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 10, 1, 1);
|
||||
+ }
|
||||
+ // Purpur end
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/SpawnerCreature.java b/src/main/java/net/minecraft/server/SpawnerCreature.java
|
||||
index 71920d7f8..2e868f5d5 100644
|
||||
--- a/src/main/java/net/minecraft/server/SpawnerCreature.java
|
||||
+++ b/src/main/java/net/minecraft/server/SpawnerCreature.java
|
||||
@@ -82,6 +82,10 @@ public final class SpawnerCreature {
|
||||
if (!worldserver.purpurConfig.giantNaturallySpawn) {
|
||||
return i;
|
||||
}
|
||||
+ } else if (entitytypes == EntityTypes.ILLUSIONER) {
|
||||
+ if (!worldserver.purpurConfig.illusionerNaturallySpawn) {
|
||||
+ return i;
|
||||
+ }
|
||||
}
|
||||
// Purpur end
|
||||
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 8cdcca3bd..8d6d25272 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -288,10 +288,18 @@ public class PurpurWorldConfig {
|
||||
public boolean illusionerRidable = false;
|
||||
public boolean illusionerRidableInWater = false;
|
||||
public boolean illusionerRequireShiftToMount = true;
|
||||
+ public boolean illusionerNaturallySpawn = false;
|
||||
+ public double illusionerMaxHealth = 32.0D;
|
||||
+ public double illusionerMovementSpeed = 0.5D;
|
||||
+ public double illusionerFollowRange = 18.0D;
|
||||
private void illusionerSettings() {
|
||||
illusionerRidable = getBoolean("mobs.illusioner.ridable", illusionerRidable);
|
||||
illusionerRidableInWater = getBoolean("mobs.illusioner.ridable-in-water", illusionerRidableInWater);
|
||||
illusionerRequireShiftToMount = getBoolean("mobs.illusioner.require-shift-to-mount", illusionerRequireShiftToMount);
|
||||
+ illusionerNaturallySpawn = getBoolean("mobs.illusioner.naturally-spawn", illusionerNaturallySpawn);
|
||||
+ illusionerMaxHealth = getDouble("mobs.illusioner.max-health", illusionerMaxHealth);
|
||||
+ illusionerMovementSpeed = getDouble("mobs.illusioner.movement-speed", illusionerMovementSpeed);
|
||||
+ illusionerFollowRange = getDouble("mobs.illusioner.follow-range", illusionerFollowRange);
|
||||
}
|
||||
|
||||
public boolean ironGolemRidable = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
From dadd35b34b2359649a188b21e7eebb9361a7c724 Mon Sep 17 00:00:00 2001
|
||||
From 7690280495c52898fc033dc61f31308dfbe6fb02 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sun, 7 Jul 2019 19:52:16 -0500
|
||||
Subject: [PATCH] Add chance for zombie horse natural spawns
|
||||
Subject: [PATCH] Zombie horse naturally spawn
|
||||
|
||||
---
|
||||
.../java/net/minecraft/server/WorldServer.java | 18 ++++++++++++------
|
||||
.../net/pl3x/purpur/PurpurWorldConfig.java | 5 +++++
|
||||
2 files changed, 17 insertions(+), 6 deletions(-)
|
||||
.../net/pl3x/purpur/PurpurWorldConfig.java | 2 ++
|
||||
2 files changed, 14 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
|
||||
index 8526a3fda1..fbfe37ea0a 100644
|
||||
index c74b85917..874b8c129 100644
|
||||
--- a/src/main/java/net/minecraft/server/WorldServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/WorldServer.java
|
||||
@@ -549,12 +549,18 @@ public class WorldServer extends World {
|
||||
@@ -554,12 +554,18 @@ public class WorldServer extends World {
|
||||
boolean flag1 = this.getGameRules().getBoolean(GameRules.DO_MOB_SPAWNING) && this.random.nextDouble() < (double) difficultydamagescaler.b() * paperConfig.skeleHorseSpawnChance; // Paper
|
||||
|
||||
if (flag1) {
|
||||
@@ -24,33 +24,35 @@ index 8526a3fda1..fbfe37ea0a 100644
|
||||
- this.addEntity(entityhorseskeleton, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.LIGHTNING); // CraftBukkit
|
||||
+ // Purpur start
|
||||
+ EntityHorseAbstract horse;
|
||||
+ if (purpurConfig.zombieHorseSpawnChance > 0F && random.nextFloat() <= purpurConfig.zombieHorseSpawnChance) {
|
||||
+ horse = EntityTypes.ZOMBIE_HORSE.a(this);
|
||||
+ if (purpurConfig.zombieHorseSpawnChance > 0D && random.nextDouble() <= purpurConfig.zombieHorseSpawnChance) {
|
||||
+ horse = EntityTypes.ZOMBIE_HORSE.create(this);
|
||||
+ } else {
|
||||
+ horse = EntityTypes.SKELETON_HORSE.a(this);
|
||||
+ ((EntityHorseSkeleton) horse).r(true);
|
||||
+ horse = EntityTypes.SKELETON_HORSE.create(this);
|
||||
+ ((EntityHorseSkeleton) horse).setTrap(true);
|
||||
+ }
|
||||
+ horse.setAgeRaw(0);
|
||||
+ horse.setPosition((double) blockposition.getX(), (double) blockposition.getY(), (double) blockposition.getZ());
|
||||
+ this.addEntity(horse, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.LIGHTNING); // CraftBukkit
|
||||
+ horse.setPosition(blockposition.getX(), blockposition.getY(), blockposition.getZ());
|
||||
+ addEntity(horse, CreatureSpawnEvent.SpawnReason.LIGHTNING); // CraftBukkit
|
||||
+ // Purpur end
|
||||
}
|
||||
|
||||
this.strikeLightning(new EntityLightning(this, (double) blockposition.getX() + 0.5D, (double) blockposition.getY(), (double) blockposition.getZ() + 0.5D, flag1), org.bukkit.event.weather.LightningStrikeEvent.Cause.WEATHER); // CraftBukkit
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 968d32900a..64128359c1 100644
|
||||
index 8d6d25272..723776f95 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -115,4 +115,9 @@ public class PurpurWorldConfig {
|
||||
private void enderDragonSettings() {
|
||||
enderDragonAlwaysDropsEggBlock = getBoolean("mobs.ender-dragon.always-drop-egg-block", enderDragonAlwaysDropsEggBlock);
|
||||
@@ -640,9 +640,11 @@ public class PurpurWorldConfig {
|
||||
|
||||
public boolean zombieHorseCanSwim = false;
|
||||
public boolean zombieHorseRidableInWater = false;
|
||||
+ public double zombieHorseSpawnChance = 0.0D;
|
||||
private void zombieHorseSettings() {
|
||||
zombieHorseCanSwim = getBoolean("mobs.zombie_horse.can-swim", zombieHorseCanSwim);
|
||||
zombieHorseRidableInWater = getBoolean("mobs.zombie_horse.ridable-in-water", zombieHorseRidableInWater);
|
||||
+ zombieHorseSpawnChance = getDouble("mobs.zombie_horse.spawn-chance", zombieHorseSpawnChance);
|
||||
}
|
||||
+
|
||||
+ public float zombieHorseSpawnChance = 0F;
|
||||
+ private void zombieHorseSettings() {
|
||||
+ zombieHorseSpawnChance = (float) getDouble("mobs.zombie_horse.spawn-chance", zombieHorseSpawnChance);
|
||||
+ }
|
||||
}
|
||||
|
||||
public boolean zombiePigmanRidable = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
52
patches/server/0011-Charged-creeper-naturally-spawn.patch
Normal file
52
patches/server/0011-Charged-creeper-naturally-spawn.patch
Normal file
@@ -0,0 +1,52 @@
|
||||
From c95533f81d47bcc5299b59033211b8fc713be8bc Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
||||
Date: Fri, 29 Nov 2019 22:37:44 -0600
|
||||
Subject: [PATCH] Charged creeper naturally spawn
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityCreeper.java | 11 +++++++++++
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 2 ++
|
||||
2 files changed, 13 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityCreeper.java b/src/main/java/net/minecraft/server/EntityCreeper.java
|
||||
index 48fd8e716..d414b848e 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityCreeper.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityCreeper.java
|
||||
@@ -87,6 +87,17 @@ public class EntityCreeper extends EntityMonster {
|
||||
this.datawatcher.register(EntityCreeper.d, false);
|
||||
}
|
||||
|
||||
+ // Purpur start
|
||||
+ @Override
|
||||
+ public GroupDataEntity prepare(GeneratorAccess generatoraccess, DifficultyDamageScaler difficultydamagescaler, EnumMobSpawn enummobspawn, GroupDataEntity groupdataentity, NBTTagCompound nbttagcompound) {
|
||||
+ double chance = ((World) generatoraccess).purpurConfig.creeperChargedChance;
|
||||
+ if (chance > 0D && random.nextDouble() <= chance) {
|
||||
+ setPowered(true);
|
||||
+ }
|
||||
+ return super.prepare(generatoraccess, difficultydamagescaler, enummobspawn, groupdataentity, nbttagcompound);
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
@Override
|
||||
public void b(NBTTagCompound nbttagcompound) {
|
||||
super.b(nbttagcompound);
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 723776f95..c6dce70d0 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -141,10 +141,12 @@ public class PurpurWorldConfig {
|
||||
public boolean creeperRidable = false;
|
||||
public boolean creeperRidableInWater = false;
|
||||
public boolean creeperRequireShiftToMount = true;
|
||||
+ public double creeperChargedChance = 0.0D;
|
||||
private void creeperSettings() {
|
||||
creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable);
|
||||
creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater);
|
||||
creeperRequireShiftToMount = getBoolean("mobs.creeper.require-shift-to-mount", creeperRequireShiftToMount);
|
||||
+ creeperChargedChance = getDouble("mobs.creeper.naturally-charged-chance", creeperChargedChance);
|
||||
}
|
||||
|
||||
public boolean dolphinRidable = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
From ccb0e7ca64314cac34a3449b751c42efa5db935e Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sun, 12 May 2019 01:14:46 -0500
|
||||
Subject: [PATCH] Pigs give saddle back
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityPig.java | 12 +++++++++++-
|
||||
1 file changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityPig.java b/src/main/java/net/minecraft/server/EntityPig.java
|
||||
index 81ba9f240..036ec3ec2 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityPig.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityPig.java
|
||||
@@ -119,10 +119,20 @@ public class EntityPig extends EntityAnimal {
|
||||
return true;
|
||||
}
|
||||
if (hasSaddle() && !isVehicle()) {
|
||||
+ if (entityhuman.isSneaking()) {
|
||||
+ setSaddle(false);
|
||||
+ if (!entityhuman.abilities.canInstantlyBuild) {
|
||||
+ ItemStack saddle = new ItemStack(Items.SADDLE);
|
||||
+ if (!entityhuman.inventory.pickup(saddle)) {
|
||||
+ entityhuman.drop(saddle, false);
|
||||
+ }
|
||||
+ }
|
||||
+ return true;
|
||||
+ }
|
||||
entityhuman.startRiding(this);
|
||||
return true;
|
||||
}
|
||||
- if (itemstack.getItem() == Items.SADDLE) {
|
||||
+ if (itemstack.getItem() == Items.SADDLE && !entityhuman.isSneaking()) {
|
||||
itemstack.a(entityhuman, this, enumhand);
|
||||
return true;
|
||||
}
|
||||
--
|
||||
2.20.1
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
From eca31a254b26c52526071806df6ea50b9504ff34 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 31 Aug 2019 17:47:11 -0500
|
||||
Subject: [PATCH] Rabbit naturally spawn toast and killer
|
||||
|
||||
---
|
||||
.../java/net/minecraft/server/EntityRabbit.java | 14 ++++++++++++++
|
||||
.../java/net/pl3x/purpur/PurpurWorldConfig.java | 4 ++++
|
||||
2 files changed, 18 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityRabbit.java b/src/main/java/net/minecraft/server/EntityRabbit.java
|
||||
index 9040ab1c5..7ffa90af8 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityRabbit.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityRabbit.java
|
||||
@@ -364,6 +364,10 @@ public class EntityRabbit extends EntityAnimal {
|
||||
if (!this.hasCustomName()) {
|
||||
this.setCustomName(new ChatMessage(SystemUtils.a("entity", EntityRabbit.bx), new Object[0]));
|
||||
}
|
||||
+ // Purpur start
|
||||
+ } else if (i == 98) {
|
||||
+ setCustomName(new ChatMessage("Toast"));
|
||||
+ // Purpur end
|
||||
}
|
||||
|
||||
this.datawatcher.set(EntityRabbit.bw, i);
|
||||
@@ -385,6 +389,16 @@ public class EntityRabbit extends EntityAnimal {
|
||||
}
|
||||
|
||||
private int a(GeneratorAccess generatoraccess) {
|
||||
+ // Purpur start
|
||||
+ World world = (World) generatoraccess;
|
||||
+ if (world.purpurConfig.rabbitNaturalKiller > 0D && random.nextDouble() <= world.purpurConfig.rabbitNaturalKiller) {
|
||||
+ return 99;
|
||||
+ }
|
||||
+ if (world.purpurConfig.rabbitNaturalToast > 0D && random.nextDouble() <= world.purpurConfig.rabbitNaturalToast) {
|
||||
+ return 98;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
BiomeBase biomebase = generatoraccess.getBiome(new BlockPosition(this));
|
||||
int i = this.random.nextInt(100);
|
||||
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index c6dce70d0..c51023d0c 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -423,10 +423,14 @@ public class PurpurWorldConfig {
|
||||
public boolean rabbitRidable = false;
|
||||
public boolean rabbitRidableInWater = false;
|
||||
public boolean rabbitRequireShiftToMount = true;
|
||||
+ public double rabbitNaturalToast = 0.0D;
|
||||
+ public double rabbitNaturalKiller = 0.0D;
|
||||
private void rabbitSettings() {
|
||||
rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable);
|
||||
rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater);
|
||||
rabbitRequireShiftToMount = getBoolean("mobs.rabbit.require-shift-to-mount", rabbitRequireShiftToMount);
|
||||
+ rabbitNaturalToast = getDouble("mobs.rabbit.spawn-toast-chance", rabbitNaturalToast);
|
||||
+ rabbitNaturalKiller = getDouble("mobs.rabbit.spawn-killer-rabbit-chance", rabbitNaturalKiller);
|
||||
}
|
||||
|
||||
public boolean ravagerRidable = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
From ebb0e6e3c822041d403a5dd9a3b6d620a4f88283 Mon Sep 17 00:00:00 2001
|
||||
From eea97d4fd77eaee050b7fe38ed52408416aa87ee Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
||||
Date: Thu, 26 Dec 2019 18:52:55 -0600
|
||||
Subject: [PATCH] Add natural cat spawning options
|
||||
Subject: [PATCH] Cat spawning options
|
||||
|
||||
---
|
||||
.../net/minecraft/server/MobSpawnerCat.java | 19 +++++++++++++------
|
||||
.../net/pl3x/purpur/PurpurWorldConfig.java | 9 +++++++++
|
||||
2 files changed, 22 insertions(+), 6 deletions(-)
|
||||
.../net/minecraft/server/MobSpawnerCat.java | 23 +++++++++++++------
|
||||
.../net/pl3x/purpur/PurpurWorldConfig.java | 6 +++++
|
||||
2 files changed, 22 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/MobSpawnerCat.java b/src/main/java/net/minecraft/server/MobSpawnerCat.java
|
||||
index 6024478dc..034b97336 100644
|
||||
index 6024478dc..4b55c07d4 100644
|
||||
--- a/src/main/java/net/minecraft/server/MobSpawnerCat.java
|
||||
+++ b/src/main/java/net/minecraft/server/MobSpawnerCat.java
|
||||
@@ -15,7 +15,7 @@ public class MobSpawnerCat {
|
||||
@@ -21,24 +21,26 @@ index 6024478dc..034b97336 100644
|
||||
EntityPlayer entityplayer = worldserver.k();
|
||||
|
||||
if (entityplayer == null) {
|
||||
@@ -49,10 +49,13 @@ public class MobSpawnerCat {
|
||||
@@ -49,10 +49,14 @@ public class MobSpawnerCat {
|
||||
}
|
||||
|
||||
private int a(WorldServer worldserver, BlockPosition blockposition) {
|
||||
- boolean flag = true;
|
||||
+ // Purpur start
|
||||
+ int range = worldserver.purpurConfig.catSpawnVillageScanRange;
|
||||
+ if (range <= 0) return 0;
|
||||
+ // Purpur end
|
||||
|
||||
-
|
||||
- if (worldserver.B().a(VillagePlaceType.q.c(), blockposition, 48, VillagePlace.Occupancy.IS_OCCUPIED) > 4L) {
|
||||
- List<EntityCat> list = worldserver.a(EntityCat.class, (new AxisAlignedBB(blockposition)).grow(48.0D, 8.0D, 48.0D));
|
||||
+ // Purpur start
|
||||
+ int range = worldserver.purpurConfig.catSpawnVillageScanRange;
|
||||
+ if (range <= 0) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+ if (worldserver.B().a(VillagePlaceType.q.c(), blockposition, range, VillagePlace.Occupancy.IS_OCCUPIED) > 4L) {
|
||||
+ List<EntityCat> list = worldserver.a(EntityCat.class, (new AxisAlignedBB(blockposition)).grow(range, 8.0D, range)); // Purpur
|
||||
+ List<EntityCat> list = worldserver.a(EntityCat.class, (new AxisAlignedBB(blockposition)).grow(range, 8.0D, range));
|
||||
+ // Purpur end
|
||||
|
||||
if (list.size() < 5) {
|
||||
return this.a(blockposition, (World) worldserver);
|
||||
@@ -63,8 +66,12 @@ public class MobSpawnerCat {
|
||||
@@ -63,8 +67,13 @@ public class MobSpawnerCat {
|
||||
}
|
||||
|
||||
private int a(World world, BlockPosition blockposition) {
|
||||
@@ -46,33 +48,35 @@ index 6024478dc..034b97336 100644
|
||||
- List<EntityCat> list = world.a(EntityCat.class, (new AxisAlignedBB(blockposition)).grow(16.0D, 8.0D, 16.0D));
|
||||
+ // Purpur start
|
||||
+ int range = world.purpurConfig.catSpawnSwampHutScanRange;
|
||||
+ if (range <= 0) return 0;
|
||||
+ if (range <= 0) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+ List<EntityCat> list = world.a(EntityCat.class, (new AxisAlignedBB(blockposition)).grow(range, 8.0D, range));
|
||||
+ // Purpur end
|
||||
+
|
||||
+ List<EntityCat> list = world.a(EntityCat.class, (new AxisAlignedBB(blockposition)).grow(range, 8.0D, range)); // Purpur
|
||||
|
||||
return list.size() < 1 ? this.a(blockposition, world) : 0;
|
||||
}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 69b3bef76..3bb968cfa 100644
|
||||
index c51023d0c..e5cd92e2d 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -185,6 +185,15 @@ public class PurpurWorldConfig {
|
||||
playerSleepCondition = getString("player.sleep.condition", playerSleepCondition);
|
||||
}
|
||||
|
||||
@@ -94,10 +94,16 @@ public class PurpurWorldConfig {
|
||||
public boolean catRidable = false;
|
||||
public boolean catRidableInWater = false;
|
||||
public boolean catRequireShiftToMount = true;
|
||||
+ public int catSpawnDelay = 1200;
|
||||
+ public int catSpawnSwampHutScanRange = 16;
|
||||
+ public int catSpawnVillageScanRange = 48;
|
||||
+ private void catSettings() {
|
||||
+ catSpawnDelay = getInt("mobs.cat.natural-spawns.delay", catSpawnDelay);
|
||||
+ catSpawnSwampHutScanRange = getInt("mobs.cat.natural-spawns.scan-range-for-other-cats.swamp-hut", catSpawnSwampHutScanRange);
|
||||
+ catSpawnVillageScanRange = getInt("mobs.cat.natural-spawns.scan-range-for-other-cats.village", catSpawnVillageScanRange);
|
||||
+ }
|
||||
+
|
||||
public int chickenEggsHatchWhenDespawnedMax = 0;
|
||||
public int chickenEggsHatchWhenDespawnedRange = 10;
|
||||
private void chickenSettings() {
|
||||
private void catSettings() {
|
||||
catRidable = getBoolean("mobs.cat.ridable", catRidable);
|
||||
catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater);
|
||||
catRequireShiftToMount = getBoolean("mobs.cat.require-shift-to-mount", catRequireShiftToMount);
|
||||
+ catSpawnDelay = getInt("mobs.cat.spawn-delay", catSpawnDelay);
|
||||
+ catSpawnSwampHutScanRange = getInt("mobs.cat.scan-range-for-other-cats.swamp-hut", catSpawnSwampHutScanRange);
|
||||
+ catSpawnVillageScanRange = getInt("mobs.cat.scan-range-for-other-cats.village", catSpawnVillageScanRange);
|
||||
}
|
||||
|
||||
public boolean caveSpiderRidable = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
From 615cb3372831f93095e6b0aa27ce12dc9db78634 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 18 May 2019 16:59:52 -0500
|
||||
Subject: [PATCH] Prevent phantoms spawning on creative players
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/MobSpawnerPhantom.java | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/MobSpawnerPhantom.java b/src/main/java/net/minecraft/server/MobSpawnerPhantom.java
|
||||
index f488c22ed6..78ea16f010 100644
|
||||
--- a/src/main/java/net/minecraft/server/MobSpawnerPhantom.java
|
||||
+++ b/src/main/java/net/minecraft/server/MobSpawnerPhantom.java
|
||||
@@ -31,7 +31,7 @@ public class MobSpawnerPhantom {
|
||||
while (iterator.hasNext()) {
|
||||
EntityHuman entityhuman = (EntityHuman) iterator.next();
|
||||
|
||||
- if (!entityhuman.isSpectator()) {
|
||||
+ if (!entityhuman.isSpectator() && !entityhuman.isCreative()) { // Purpur
|
||||
BlockPosition blockposition = new BlockPosition(entityhuman);
|
||||
|
||||
if (!worldserver.worldProvider.f() || blockposition.getY() >= worldserver.getSeaLevel() && worldserver.f(blockposition)) {
|
||||
--
|
||||
2.24.0.rc1
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From 20872c850b40b30fe571c9b3e6133dafce84feb2 Mon Sep 17 00:00:00 2001
|
||||
From 10f6a4cbd7256d8257ba1fdf3117a943d1839a5a Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
||||
Date: Thu, 2 Jan 2020 01:23:22 -0600
|
||||
Subject: [PATCH] Fix non black cat types spawning in swamp huts
|
||||
@@ -8,10 +8,10 @@ Subject: [PATCH] Fix non black cat types spawning in swamp huts
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/MobSpawnerCat.java b/src/main/java/net/minecraft/server/MobSpawnerCat.java
|
||||
index 034b97336..cc2f37869 100644
|
||||
index 4b55c07d4..fa2222355 100644
|
||||
--- a/src/main/java/net/minecraft/server/MobSpawnerCat.java
|
||||
+++ b/src/main/java/net/minecraft/server/MobSpawnerCat.java
|
||||
@@ -82,8 +82,9 @@ public class MobSpawnerCat {
|
||||
@@ -84,8 +84,9 @@ public class MobSpawnerCat {
|
||||
if (entitycat == null) {
|
||||
return 0;
|
||||
} else {
|
||||
@@ -1,88 +0,0 @@
|
||||
From 04c9f3e094bdb7afd444279a484a89df8c11fb04 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Thu, 23 May 2019 16:20:21 -0500
|
||||
Subject: [PATCH] Campfires should fall with gravity
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/Block.java | 1 +
|
||||
.../net/minecraft/server/BlockCampfire.java | 26 ++++++++++++++++++-
|
||||
.../net/pl3x/purpur/PurpurWorldConfig.java | 5 ++++
|
||||
3 files changed, 31 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Block.java b/src/main/java/net/minecraft/server/Block.java
|
||||
index 0afcbef2f3..2c464299a1 100644
|
||||
--- a/src/main/java/net/minecraft/server/Block.java
|
||||
+++ b/src/main/java/net/minecraft/server/Block.java
|
||||
@@ -387,6 +387,7 @@ public class Block implements IMaterial {
|
||||
PacketDebug.a(world, blockposition);
|
||||
}
|
||||
|
||||
+ public int tickRate(IWorldReader world) { return this.a(world); } // Purpur - OBFHELPER
|
||||
public int a(IWorldReader iworldreader) {
|
||||
return 10;
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockCampfire.java b/src/main/java/net/minecraft/server/BlockCampfire.java
|
||||
index 6303be944c..5d1312d2f1 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockCampfire.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockCampfire.java
|
||||
@@ -74,8 +74,32 @@ public class BlockCampfire extends BlockTileEntity implements IBlockWaterlogged
|
||||
return (IBlockData) ((IBlockData) ((IBlockData) ((IBlockData) this.getBlockData().set(BlockCampfire.d, flag)).set(BlockCampfire.c, this.h(world.getType(blockposition.down())))).set(BlockCampfire.b, !flag)).set(BlockCampfire.e, blockactioncontext.f());
|
||||
}
|
||||
|
||||
+ // Purpur start - Campfires should fall with gravity
|
||||
+ @Override
|
||||
+ public void onPlace(IBlockData iblockdata, World world, BlockPosition pos, IBlockData iblockdata1, boolean flag) {
|
||||
+ world.getBlockTickList().a(pos, this, tickRate(world));
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void tick(IBlockData iblockdata, WorldServer world, BlockPosition pos, Random random) {
|
||||
+ if (world.purpurConfig.campfireObeysGravity && BlockFalling.canFallThrough(world.getType(pos.down())) && pos.getY() >= 0) {
|
||||
+ world.addEntity(new EntityFallingBlock(world, pos.getX() + 0.5D, pos.getY(), pos.getZ() + 0.5D, world.getType(pos)));
|
||||
+ }
|
||||
+ if (iblockdata.get(BlockCampfire.d) && iblockdata.get(BlockCampfire.b)) {
|
||||
+ world.setTypeAndData(pos, iblockdata.set(BlockCampfire.b, false), 3);
|
||||
+ }
|
||||
+ world.getBlockTickList().a(pos, this, tickRate(world));
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public int tickRate(IWorldReader world) {
|
||||
+ return 1;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
@Override
|
||||
public IBlockData updateState(IBlockData iblockdata, EnumDirection enumdirection, IBlockData iblockdata1, GeneratorAccess generatoraccess, BlockPosition blockposition, BlockPosition blockposition1) {
|
||||
+ generatoraccess.getBlockTickList().a(blockposition, this, tickRate(generatoraccess)); // Purpur - Campfires should fall with gravity
|
||||
if ((Boolean) iblockdata.get(BlockCampfire.d)) {
|
||||
generatoraccess.getFluidTickList().a(blockposition, FluidTypes.WATER, FluidTypes.WATER.a((IWorldReader) generatoraccess));
|
||||
}
|
||||
@@ -104,7 +128,7 @@ public class BlockCampfire extends BlockTileEntity implements IBlockWaterlogged
|
||||
|
||||
@Override
|
||||
public boolean place(GeneratorAccess generatoraccess, BlockPosition blockposition, IBlockData iblockdata, Fluid fluid) {
|
||||
- if (!(Boolean) iblockdata.get(BlockProperties.C) && fluid.getType() == FluidTypes.WATER) {
|
||||
+ if (!(Boolean) iblockdata.get(BlockCampfire.d) && fluid.getType() == FluidTypes.WATER) { // Purpur
|
||||
boolean flag = (Boolean) iblockdata.get(BlockCampfire.b);
|
||||
|
||||
if (flag) {
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index f4811a1d7b..33840d0036 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -58,6 +58,11 @@ public class PurpurWorldConfig {
|
||||
return PurpurConfig.config.getString("world-settings." + worldName + "." + path, PurpurConfig.config.getString("world-settings.default." + path));
|
||||
}
|
||||
|
||||
+ public boolean campfireObeysGravity = true;
|
||||
+ private void campfireObeysGravity() {
|
||||
+ campfireObeysGravity = getBoolean("campfire-obeys-gravity", campfireObeysGravity);
|
||||
+ }
|
||||
+
|
||||
public int campfireRegenInterval = 40;
|
||||
public int campfireRegenDuration = 80;
|
||||
public int campfireRegenRange = 5;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
From 33dcc02e3f144c7a4fd1467b79477ecdddce520d Mon Sep 17 00:00:00 2001
|
||||
From 9a89bf6455593f02b131d6c073cdbec5177e7831 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 4 May 2019 01:10:30 -0500
|
||||
Subject: [PATCH] cows to mooshroom when fed mushrooms
|
||||
Subject: [PATCH] Cows eat mushrooms
|
||||
|
||||
---
|
||||
.../java/net/minecraft/server/Entity.java | 2 +
|
||||
.../java/net/minecraft/server/EntityCow.java | 70 +++++++++++++++++++
|
||||
.../net/minecraft/server/EntityLiving.java | 7 ++
|
||||
.../java/net/pl3x/purpur/PurpurConfig.java | 5 ++
|
||||
4 files changed, 84 insertions(+)
|
||||
.../net/minecraft/server/EntityLiving.java | 5 +-
|
||||
.../net/pl3x/purpur/PurpurWorldConfig.java | 2 +
|
||||
4 files changed, 77 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
||||
index c1ffd6dc1..fefdd2b27 100644
|
||||
index 37c1c519b..b18e9ae50 100644
|
||||
--- a/src/main/java/net/minecraft/server/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/server/Entity.java
|
||||
@@ -1037,6 +1037,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
||||
@@ -22,7 +22,7 @@ index c1ffd6dc1..fefdd2b27 100644
|
||||
public void a(SoundEffect soundeffect, float f, float f1) {
|
||||
if (!this.isSilent()) {
|
||||
this.world.playSound((EntityHuman) null, this.locX(), this.locY(), this.locZ(), soundeffect, this.getSoundCategory(), f, f1);
|
||||
@@ -2554,6 +2555,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
||||
@@ -2568,6 +2569,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
||||
this.invulnerable = flag;
|
||||
}
|
||||
|
||||
@@ -31,23 +31,23 @@ index c1ffd6dc1..fefdd2b27 100644
|
||||
this.setPositionRotation(entity.locX(), entity.locY(), entity.locZ(), entity.yaw, entity.pitch);
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityCow.java b/src/main/java/net/minecraft/server/EntityCow.java
|
||||
index 2c8bbf20a..e1d0f0f38 100644
|
||||
index 723a9fa1e..f56fd7c01 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityCow.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityCow.java
|
||||
@@ -16,6 +16,7 @@ public class EntityCow extends EntityAnimal {
|
||||
this.goalSelector.a(0, new PathfinderGoalFloat(this));
|
||||
@@ -34,6 +34,7 @@ public class EntityCow extends EntityAnimal {
|
||||
this.goalSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
|
||||
this.goalSelector.a(1, new PathfinderGoalPanic(this, 2.0D));
|
||||
this.goalSelector.a(2, new PathfinderGoalBreed(this, 1.0D));
|
||||
+ if (net.pl3x.purpur.PurpurConfig.feedMushroomsToCows > 0) this.goalSelector.a(3, new PathfinderGoalTempt(this, 1.25D, RecipeItemStack.a(Items.WHEAT, Blocks.RED_MUSHROOM.getItem(), Blocks.BROWN_MUSHROOM.getItem()), false)); else // Purpur
|
||||
+ if (world.purpurConfig.cowFeedMushrooms > 0) this.goalSelector.a(3, new PathfinderGoalTempt(this, 1.25D, RecipeItemStack.a(Items.WHEAT, Blocks.RED_MUSHROOM.getItem(), Blocks.BROWN_MUSHROOM.getItem()), false)); else // Purpur
|
||||
this.goalSelector.a(3, new PathfinderGoalTempt(this, 1.25D, RecipeItemStack.a(Items.WHEAT), false));
|
||||
this.goalSelector.a(4, new PathfinderGoalFollowParent(this, 1.25D));
|
||||
this.goalSelector.a(5, new PathfinderGoalRandomStrollLand(this, 1.0D));
|
||||
@@ -78,11 +79,80 @@ public class EntityCow extends EntityAnimal {
|
||||
@@ -96,11 +97,80 @@ public class EntityCow extends EntityAnimal {
|
||||
// CraftBukkit end
|
||||
|
||||
return true;
|
||||
+ // Purpur start - feed mushroom to change to mooshroom
|
||||
+ } else if (net.pl3x.purpur.PurpurConfig.feedMushroomsToCows > 0 && getEntityType() != EntityTypes.MOOSHROOM && isMushroom(itemstack)) {
|
||||
+ } else if (world.purpurConfig.cowFeedMushrooms > 0 && getEntityType() != EntityTypes.MOOSHROOM && isMushroom(itemstack)) {
|
||||
+ return feedMushroom(entityhuman, itemstack);
|
||||
+ // Purpur end
|
||||
} else {
|
||||
@@ -74,7 +74,7 @@ index 2c8bbf20a..e1d0f0f38 100644
|
||||
+ private boolean feedMushroom(EntityHuman entityhuman, ItemStack itemstack) {
|
||||
+ world.broadcastEntityEffect(this, (byte) 18); // hearts
|
||||
+ playSound(SoundEffects.ENTITY_COW_MILK, 1.0F, 1.0F);
|
||||
+ if (incrementFeedCount(itemstack) < net.pl3x.purpur.PurpurConfig.feedMushroomsToCows) {
|
||||
+ if (incrementFeedCount(itemstack) < world.purpurConfig.cowFeedMushrooms) {
|
||||
+ if (!entityhuman.abilities.canInstantlyBuild) {
|
||||
+ itemstack.subtract(1);
|
||||
+ }
|
||||
@@ -100,10 +100,10 @@ index 2c8bbf20a..e1d0f0f38 100644
|
||||
+ if (this.hasCustomName()) {
|
||||
+ mooshroom.setCustomName(this.getCustomName());
|
||||
+ }
|
||||
+ if (CraftEventFactory.callEntityTransformEvent(this, mooshroom, org.bukkit.event.entity.EntityTransformEvent.TransformReason.SHROOMED).isCancelled()) {
|
||||
+ if (CraftEventFactory.callEntityTransformEvent(this, mooshroom, org.bukkit.event.entity.EntityTransformEvent.TransformReason.INFECTION).isCancelled()) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ if (!new com.destroystokyo.paper.event.entity.EntityTransformedEvent(this.getBukkitEntity(), mooshroom.getBukkitEntity(), com.destroystokyo.paper.event.entity.EntityTransformedEvent.TransformedReason.SHROOMED).callEvent()) {
|
||||
+ if (!new com.destroystokyo.paper.event.entity.EntityTransformedEvent(this.getBukkitEntity(), mooshroom.getBukkitEntity(), com.destroystokyo.paper.event.entity.EntityTransformedEvent.TransformedReason.INFECTED).callEvent()) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ this.world.addEntity(mooshroom);
|
||||
@@ -124,37 +124,38 @@ index 2c8bbf20a..e1d0f0f38 100644
|
||||
public EntityCow createChild(EntityAgeable entityageable) {
|
||||
return (EntityCow) EntityTypes.COW.a(this.world);
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index 6184cced7..ad6f96988 100644
|
||||
index 17ff8a9fc..6ca11091c 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -2809,6 +2809,13 @@ public abstract class EntityLiving extends Entity {
|
||||
@@ -2812,8 +2812,9 @@ public abstract class EntityLiving extends Entity {
|
||||
this.aK = f;
|
||||
}
|
||||
|
||||
+ // Purpur start
|
||||
+ public float getRenderYawOffset() {
|
||||
+ return this.aI;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
- @Override
|
||||
- public void l(float f) {
|
||||
+ public float getRenderYawOffset() { return this.aI; } // Purpur - OBFHELPER
|
||||
+ public void setRenderYawOffset(float f) { this.l(f); } // Purpur - OBFHELPER
|
||||
@Override
|
||||
public void l(float f) {
|
||||
+ @Override public void l(float f) {
|
||||
this.aI = f;
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index 6f378b5f6..26e95035b 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -130,4 +130,9 @@ public class PurpurConfig {
|
||||
config.addDefault(path, def);
|
||||
return config.getString(path, config.getString(path));
|
||||
}
|
||||
+
|
||||
+ public static int feedMushroomsToCows = 0;
|
||||
+ private static void cowsSettings() {
|
||||
+ feedMushroomsToCows = getInt("settings.mobs.cow.feed-mushrooms-for-mooshroom", feedMushroomsToCows);
|
||||
+ }
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index e5cd92e2d..88aa21fe4 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -138,10 +138,12 @@ public class PurpurWorldConfig {
|
||||
public boolean cowRidable = false;
|
||||
public boolean cowRidableInWater = false;
|
||||
public boolean cowRequireShiftToMount = true;
|
||||
+ public int cowFeedMushrooms = 0;
|
||||
private void cowSettings() {
|
||||
cowRidable = getBoolean("mobs.cow.ridable", cowRidable);
|
||||
cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater);
|
||||
cowRequireShiftToMount = getBoolean("mobs.cow.require-shift-to-mount", cowRequireShiftToMount);
|
||||
+ cowFeedMushrooms = getInt("mobs.cow.feed-mushrooms-for-mooshroom", cowFeedMushrooms);
|
||||
}
|
||||
|
||||
public boolean creeperRidable = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
From 003c0a4b0f11853467a5bf473748caa966b12206 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Thu, 6 Jun 2019 21:30:49 -0500
|
||||
Subject: [PATCH] Campfires burn out in rain
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/BlockCampfire.java | 3 +++
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 5 +++++
|
||||
2 files changed, 8 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockCampfire.java b/src/main/java/net/minecraft/server/BlockCampfire.java
|
||||
index 5d1312d2f1..7cb4ce95e7 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockCampfire.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockCampfire.java
|
||||
@@ -88,6 +88,9 @@ public class BlockCampfire extends BlockTileEntity implements IBlockWaterlogged
|
||||
if (iblockdata.get(BlockCampfire.d) && iblockdata.get(BlockCampfire.b)) {
|
||||
world.setTypeAndData(pos, iblockdata.set(BlockCampfire.b, false), 3);
|
||||
}
|
||||
+ if (world.purpurConfig.campfiresGoOutInRain && world.getTime() % 20 == 0L && iblockdata.get(BlockCampfire.b) && world.isRainingAt(pos.shift(EnumDirection.UP))) {
|
||||
+ world.setTypeAndData(pos, iblockdata.set(BlockCampfire.b, false), 3);
|
||||
+ }
|
||||
world.getBlockTickList().a(pos, this, tickRate(world));
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 33840d0036..6a9647367f 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -85,4 +85,9 @@ public class PurpurWorldConfig {
|
||||
campfireRegenBoostRequireLineOfSight = getBoolean("campfire-regen.boost-require-line-of-sight", campfireRegenBoostRequireLineOfSight);
|
||||
campfireRequireRegenPotion = getBoolean("campfire-regen.requires-regen-potion-to-activate", campfireRequireRegenPotion);
|
||||
}
|
||||
+
|
||||
+ public boolean campfiresGoOutInRain = true;
|
||||
+ private void campfiresGoOutInRain() {
|
||||
+ campfiresGoOutInRain = getBoolean("campfires-go-out-in-rain", campfiresGoOutInRain);
|
||||
+ }
|
||||
}
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From bd8ee39f3fd15c4997907ad92367318138b08998 Mon Sep 17 00:00:00 2001
|
||||
From 7a067dfcb4cd96ad04f3c05d3b332a7508f19624 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Fri, 3 May 2019 23:53:16 -0500
|
||||
Subject: [PATCH] Fix cow rotation when shearing mooshroom
|
||||
@@ -8,10 +8,10 @@ Subject: [PATCH] Fix cow rotation when shearing mooshroom
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityMushroomCow.java b/src/main/java/net/minecraft/server/EntityMushroomCow.java
|
||||
index efde7bd1d7..ce5bac35db 100644
|
||||
index b20f4afd3..02d76a6c6 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityMushroomCow.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityMushroomCow.java
|
||||
@@ -101,7 +101,13 @@ public class EntityMushroomCow extends EntityCow {
|
||||
@@ -118,7 +118,13 @@ public class EntityMushroomCow extends EntityCow {
|
||||
|
||||
entitycow.setPositionRotation(this.locX(), this.locY(), this.locZ(), this.yaw, this.pitch);
|
||||
entitycow.setHealth(this.getHealth());
|
||||
@@ -27,5 +27,5 @@ index efde7bd1d7..ce5bac35db 100644
|
||||
entitycow.setCustomName(this.getCustomName());
|
||||
entitycow.setCustomNameVisible(this.getCustomNameVisible());
|
||||
--
|
||||
2.24.0.rc1
|
||||
2.24.0
|
||||
|
||||
@@ -1,94 +0,0 @@
|
||||
From c25c25d42f7a1f4b98c803061e5ad521a039452e Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Thu, 23 May 2019 21:50:37 -0500
|
||||
Subject: [PATCH] Packed Barrels
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/TileEntityBarrel.java | 5 +++--
|
||||
src/main/java/net/pl3x/purpur/PurpurConfig.java | 7 +++++++
|
||||
.../org/bukkit/craftbukkit/inventory/CraftContainer.java | 6 +++++-
|
||||
3 files changed, 15 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/TileEntityBarrel.java b/src/main/java/net/minecraft/server/TileEntityBarrel.java
|
||||
index 1e27abbea..08dee7518 100644
|
||||
--- a/src/main/java/net/minecraft/server/TileEntityBarrel.java
|
||||
+++ b/src/main/java/net/minecraft/server/TileEntityBarrel.java
|
||||
@@ -54,7 +54,7 @@ public class TileEntityBarrel extends TileEntityLootable {
|
||||
|
||||
private TileEntityBarrel(TileEntityTypes<?> tileentitytypes) {
|
||||
super(tileentitytypes);
|
||||
- this.items = NonNullList.a(27, ItemStack.a);
|
||||
+ this.items = NonNullList.a(net.pl3x.purpur.PurpurConfig.packedBarrels ? 54 : 27, ItemStack.a); // Purpur
|
||||
}
|
||||
|
||||
public TileEntityBarrel() {
|
||||
@@ -83,7 +83,7 @@ public class TileEntityBarrel extends TileEntityLootable {
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
- return 27;
|
||||
+ return net.pl3x.purpur.PurpurConfig.packedBarrels ? 54 : 27; // Purpur
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -103,6 +103,7 @@ public class TileEntityBarrel extends TileEntityLootable {
|
||||
|
||||
@Override
|
||||
protected Container createContainer(int i, PlayerInventory playerinventory) {
|
||||
+ if (net.pl3x.purpur.PurpurConfig.packedBarrels) return ContainerChest.b(i, playerinventory, this); // Purpur
|
||||
return ContainerChest.a(i, playerinventory, this);
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index d7da38bf5..2179acffe 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -6,6 +6,7 @@ import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.configuration.InvalidConfigurationException;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
+import org.bukkit.event.inventory.InventoryType;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@@ -164,6 +165,12 @@ public class PurpurConfig {
|
||||
snowmanPumpkinPutBack = getBoolean("settings.mobs.snow_golem.pumpkin-can-be-added-back", snowmanPumpkinPutBack);
|
||||
}
|
||||
|
||||
+ public static boolean packedBarrels = true;
|
||||
+ private static void packedBarrels() {
|
||||
+ packedBarrels = getBoolean("settings.packed-barrels", packedBarrels);
|
||||
+ InventoryType.BARREL.setDefaultSize(packedBarrels ? 54 : 27);
|
||||
+ }
|
||||
+
|
||||
public static boolean ridableBat = true;
|
||||
public static boolean ridableBee = true;
|
||||
public static boolean ridableBlaze = true;
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java
|
||||
index b4a7d982e..49cc721f5 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java
|
||||
@@ -155,6 +155,8 @@ public class CraftContainer extends Container {
|
||||
return Containers.GRINDSTONE;
|
||||
case STONECUTTER:
|
||||
return Containers.STONECUTTER;
|
||||
+ case BARREL:
|
||||
+ return net.pl3x.purpur.PurpurConfig.packedBarrels ? Containers.GENERIC_9X6 : Containers.GENERIC_9X3;
|
||||
default:
|
||||
return Containers.GENERIC_9X3;
|
||||
}
|
||||
@@ -168,8 +170,10 @@ public class CraftContainer extends Container {
|
||||
case PLAYER:
|
||||
case CHEST:
|
||||
case ENDER_CHEST:
|
||||
+ delegate = new ContainerChest(Containers.GENERIC_9X3, windowId, bottom, top, top.getSize() / 9); // Purpur
|
||||
+ break;
|
||||
case BARREL:
|
||||
- delegate = new ContainerChest(Containers.GENERIC_9X3, windowId, bottom, top, top.getSize() / 9);
|
||||
+ delegate = new ContainerChest(net.pl3x.purpur.PurpurConfig.packedBarrels ? Containers.GENERIC_9X6 : Containers.GENERIC_9X3, windowId, bottom, top, top.getSize() / 9); // Purpur
|
||||
break;
|
||||
case DISPENSER:
|
||||
case DROPPER:
|
||||
--
|
||||
2.24.0.rc1
|
||||
|
||||
52
patches/server/0017-Pigs-give-saddle-back.patch
Normal file
52
patches/server/0017-Pigs-give-saddle-back.patch
Normal file
@@ -0,0 +1,52 @@
|
||||
From 78953ea9b97497921abe3037d7435d0b6c9fbd9b Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sun, 12 May 2019 01:14:46 -0500
|
||||
Subject: [PATCH] Pigs give saddle back
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityPig.java | 12 ++++++++++++
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 2 ++
|
||||
2 files changed, 14 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityPig.java b/src/main/java/net/minecraft/server/EntityPig.java
|
||||
index e6a7f8ef3..d78666dbb 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityPig.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityPig.java
|
||||
@@ -135,6 +135,18 @@ public class EntityPig extends EntityAnimal {
|
||||
return true;
|
||||
}
|
||||
if (hasSaddle() && !isVehicle()) {
|
||||
+ // Purpur start
|
||||
+ if (world.purpurConfig.pigGiveSaddleBack && entityhuman.isSneaking()) {
|
||||
+ setSaddle(false);
|
||||
+ if (!entityhuman.abilities.canInstantlyBuild) {
|
||||
+ ItemStack saddle = new ItemStack(Items.SADDLE);
|
||||
+ if (!entityhuman.inventory.pickup(saddle)) {
|
||||
+ entityhuman.drop(saddle, false);
|
||||
+ }
|
||||
+ }
|
||||
+ return true;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
entityhuman.startRiding(this);
|
||||
return true;
|
||||
}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 88aa21fe4..cd3b29ef1 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -396,9 +396,11 @@ public class PurpurWorldConfig {
|
||||
|
||||
public boolean pigRidable = false;
|
||||
public boolean pigRidableInWater = false;
|
||||
+ public boolean pigGiveSaddleBack = false;
|
||||
private void pigSettings() {
|
||||
pigRidable = getBoolean("mobs.pig.ridable", pigRidable);
|
||||
pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater);
|
||||
+ pigGiveSaddleBack = getBoolean("mobs.pig.give-saddle-back", pigGiveSaddleBack);
|
||||
}
|
||||
|
||||
public boolean pillagerRidable = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
From 2d93ecf31a99b2ed16069baaa2a665076e8884cd Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 18 May 2019 16:59:52 -0500
|
||||
Subject: [PATCH] Phantoms do not spawn on creative players
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/MobSpawnerPhantom.java | 2 +-
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 2 ++
|
||||
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/MobSpawnerPhantom.java b/src/main/java/net/minecraft/server/MobSpawnerPhantom.java
|
||||
index f488c22ed..748983da2 100644
|
||||
--- a/src/main/java/net/minecraft/server/MobSpawnerPhantom.java
|
||||
+++ b/src/main/java/net/minecraft/server/MobSpawnerPhantom.java
|
||||
@@ -31,7 +31,7 @@ public class MobSpawnerPhantom {
|
||||
while (iterator.hasNext()) {
|
||||
EntityHuman entityhuman = (EntityHuman) iterator.next();
|
||||
|
||||
- if (!entityhuman.isSpectator()) {
|
||||
+ if (!entityhuman.isSpectator() && (!worldserver.purpurConfig.phantomIgnoreCreative || !entityhuman.isCreative())) { // Purpur
|
||||
BlockPosition blockposition = new BlockPosition(entityhuman);
|
||||
|
||||
if (!worldserver.worldProvider.f() || blockposition.getY() >= worldserver.getSeaLevel() && worldserver.f(blockposition)) {
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index cd3b29ef1..9e89eafb8 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -387,11 +387,13 @@ public class PurpurWorldConfig {
|
||||
public boolean phantomRidableInWater = false;
|
||||
public boolean phantomRequireShiftToMount = true;
|
||||
public double phantomMaxY = 256D;
|
||||
+ public boolean phantomIgnoreCreative = false;
|
||||
private void phantomSettings() {
|
||||
phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable);
|
||||
phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater);
|
||||
phantomRequireShiftToMount = getBoolean("mobs.phantom.require-shift-to-mount", phantomRequireShiftToMount);
|
||||
phantomMaxY = getDouble("mobs.phantom.ridable-max-y", phantomMaxY);
|
||||
+ phantomIgnoreCreative = getBoolean("mobs.phantom.do-not-spawn-on-creative-players", phantomIgnoreCreative);
|
||||
}
|
||||
|
||||
public boolean pigRidable = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
57
patches/server/0019-Phantoms-only-attack-insomniacs.patch
Normal file
57
patches/server/0019-Phantoms-only-attack-insomniacs.patch
Normal file
@@ -0,0 +1,57 @@
|
||||
From 0446f5d9a8d89ffc3cfe2c0f4df57e7a4ef05167 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
||||
Date: Fri, 29 Nov 2019 20:33:41 -0600
|
||||
Subject: [PATCH] Phantoms only attack insomniacs
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityPhantom.java | 1 +
|
||||
src/main/java/net/minecraft/server/IEntitySelector.java | 1 +
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 2 ++
|
||||
3 files changed, 4 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityPhantom.java b/src/main/java/net/minecraft/server/EntityPhantom.java
|
||||
index 954edf73f..4bd9ea63b 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityPhantom.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityPhantom.java
|
||||
@@ -257,6 +257,7 @@ public class EntityPhantom extends EntityFlying implements IMonster {
|
||||
EntityHuman entityhuman = (EntityHuman) iterator.next();
|
||||
|
||||
if (EntityPhantom.this.a((EntityLiving) entityhuman, PathfinderTargetCondition.a)) {
|
||||
+ if (!world.purpurConfig.phantomOnlyAttackInsomniacs || IEntitySelector.isInsomniac.test(entityhuman)) // Purpur
|
||||
EntityPhantom.this.setGoalTarget(entityhuman, org.bukkit.event.entity.EntityTargetEvent.TargetReason.CLOSEST_PLAYER, true); // CraftBukkit - reason
|
||||
return true;
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/IEntitySelector.java b/src/main/java/net/minecraft/server/IEntitySelector.java
|
||||
index a2d1ef360..e1fdee279 100644
|
||||
--- a/src/main/java/net/minecraft/server/IEntitySelector.java
|
||||
+++ b/src/main/java/net/minecraft/server/IEntitySelector.java
|
||||
@@ -23,6 +23,7 @@ public final class IEntitySelector {
|
||||
public static final Predicate<Entity> f = (entity) -> {
|
||||
return !entity.isSpectator();
|
||||
};
|
||||
+ public static Predicate<EntityHuman> isInsomniac = (player) -> MathHelper.clamp(((EntityPlayer) player).getStatisticManager().getStatisticValue(StatisticList.CUSTOM.b(StatisticList.TIME_SINCE_REST)), 1, Integer.MAX_VALUE) >= 72000; // Purpur
|
||||
|
||||
public static Predicate<Entity> a(double d0, double d1, double d2, double d3) {
|
||||
double d4 = d3 * d3;
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 9e89eafb8..90aa470c2 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -388,12 +388,14 @@ public class PurpurWorldConfig {
|
||||
public boolean phantomRequireShiftToMount = true;
|
||||
public double phantomMaxY = 256D;
|
||||
public boolean phantomIgnoreCreative = false;
|
||||
+ public boolean phantomOnlyAttackInsomniacs = false;
|
||||
private void phantomSettings() {
|
||||
phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable);
|
||||
phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater);
|
||||
phantomRequireShiftToMount = getBoolean("mobs.phantom.require-shift-to-mount", phantomRequireShiftToMount);
|
||||
phantomMaxY = getDouble("mobs.phantom.ridable-max-y", phantomMaxY);
|
||||
phantomIgnoreCreative = getBoolean("mobs.phantom.do-not-spawn-on-creative-players", phantomIgnoreCreative);
|
||||
+ phantomOnlyAttackInsomniacs = getBoolean("mobs.phantom.only-attack-insomniacs", phantomOnlyAttackInsomniacs);
|
||||
}
|
||||
|
||||
public boolean pigRidable = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From c71a2b36871ed2f457ffd56b745e72148efabb7e Mon Sep 17 00:00:00 2001
|
||||
From a341be6ed4dab4a60a860326bd324add34e99534 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Thu, 9 May 2019 18:26:06 -0500
|
||||
Subject: [PATCH] Phantoms attracted to crystals and crystals shoot phantoms
|
||||
@@ -7,10 +7,10 @@ Subject: [PATCH] Phantoms attracted to crystals and crystals shoot phantoms
|
||||
.../net/minecraft/server/DamageSource.java | 1 +
|
||||
.../java/net/minecraft/server/Entity.java | 8 +-
|
||||
.../minecraft/server/EntityEnderCrystal.java | 49 +++++
|
||||
.../net/minecraft/server/EntityPhantom.java | 181 +++++++++++++++++-
|
||||
.../net/minecraft/server/EntityPhantom.java | 176 +++++++++++++++++-
|
||||
.../net/minecraft/server/IEntityAccess.java | 1 +
|
||||
.../java/net/pl3x/purpur/PurpurConfig.java | 9 +
|
||||
6 files changed, 235 insertions(+), 14 deletions(-)
|
||||
.../net/pl3x/purpur/PurpurWorldConfig.java | 6 +
|
||||
6 files changed, 228 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/DamageSource.java b/src/main/java/net/minecraft/server/DamageSource.java
|
||||
index 816d301f1..0971f25b5 100644
|
||||
@@ -25,10 +25,10 @@ index 816d301f1..0971f25b5 100644
|
||||
return (new EntityDamageSourceIndirect("indirectMagic", entity, entity1)).setIgnoreArmor().setMagic();
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
||||
index fefdd2b27..863ff08fd 100644
|
||||
index b18e9ae50..c6a97d6b5 100644
|
||||
--- a/src/main/java/net/minecraft/server/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/server/Entity.java
|
||||
@@ -1379,6 +1379,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
||||
@@ -1380,6 +1380,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
||||
return d3 * d3 + d4 * d4 + d5 * d5;
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ index fefdd2b27..863ff08fd 100644
|
||||
public double h(Entity entity) {
|
||||
return this.c(entity.getPositionVector());
|
||||
}
|
||||
@@ -1898,14 +1899,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
||||
@@ -1899,14 +1900,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
||||
return this.a(new ItemStack(imaterial), (float) i);
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ index fefdd2b27..863ff08fd 100644
|
||||
return null;
|
||||
} else if (this.world.isClientSide) {
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityEnderCrystal.java b/src/main/java/net/minecraft/server/EntityEnderCrystal.java
|
||||
index a57d0089d..2d46c250e 100644
|
||||
index a57d0089d..02952c3af 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityEnderCrystal.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityEnderCrystal.java
|
||||
@@ -13,6 +13,12 @@ public class EntityEnderCrystal extends Entity {
|
||||
@@ -76,12 +76,12 @@ index a57d0089d..2d46c250e 100644
|
||||
}
|
||||
|
||||
+ // Purpur start
|
||||
+ if (net.pl3x.purpur.PurpurConfig.crystalsAttackPhantomsRadius <= 0 || --idleCooldown > 0) {
|
||||
+ if (world.purpurConfig.phantomAttackedByCrystalRadius <= 0 || --idleCooldown > 0) {
|
||||
+ return; // on cooldown
|
||||
+ }
|
||||
+
|
||||
+ if (targetPhantom == null) {
|
||||
+ for (EntityPhantom phantom : world.getEntitiesByClass(EntityPhantom.class, getBoundingBox().grow(net.pl3x.purpur.PurpurConfig.crystalsAttackPhantomsRadius))) {
|
||||
+ for (EntityPhantom phantom : world.getEntitiesByClass(EntityPhantom.class, getBoundingBox().grow(world.purpurConfig.phantomAttackedByCrystalRadius))) {
|
||||
+ if (phantom.hasLineOfSight(this)) {
|
||||
+ attackPhantom(phantom);
|
||||
+ break;
|
||||
@@ -94,7 +94,7 @@ index a57d0089d..2d46c250e 100644
|
||||
+ if (targetPhantom.hasLineOfSight(this)) {
|
||||
+ if (phantomDamageCooldown <= 0) {
|
||||
+ phantomDamageCooldown = 20;
|
||||
+ targetPhantom.damageEntity(DamageSource.indirectMagic(this, this), net.pl3x.purpur.PurpurConfig.crystalsAttackPhantomDamage);
|
||||
+ targetPhantom.damageEntity(DamageSource.indirectMagic(this, this), world.purpurConfig.phantomAttackedByCrystalDamage);
|
||||
+ }
|
||||
+ } else {
|
||||
+ forgetPhantom(); // no longer in sight
|
||||
@@ -123,7 +123,7 @@ index a57d0089d..2d46c250e 100644
|
||||
@Override
|
||||
protected void b(NBTTagCompound nbttagcompound) {
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityPhantom.java b/src/main/java/net/minecraft/server/EntityPhantom.java
|
||||
index 82323bf4a..052a741c0 100644
|
||||
index 4bd9ea63b..9cae8885d 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityPhantom.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityPhantom.java
|
||||
@@ -8,9 +8,10 @@ import javax.annotation.Nullable;
|
||||
@@ -140,28 +140,30 @@ index 82323bf4a..052a741c0 100644
|
||||
|
||||
public EntityPhantom(EntityTypes<? extends EntityPhantom> entitytypes, World world) {
|
||||
super(entitytypes, world);
|
||||
@@ -29,10 +30,16 @@ public class EntityPhantom extends EntityFlying implements IMonster {
|
||||
@@ -51,12 +52,18 @@ public class EntityPhantom extends EntityFlying implements IMonster {
|
||||
|
||||
@Override
|
||||
protected void initPathfinder() {
|
||||
+ // Purpur start
|
||||
this.goalSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
|
||||
- this.goalSelector.a(1, new EntityPhantom.c());
|
||||
- this.goalSelector.a(2, new EntityPhantom.i());
|
||||
- this.goalSelector.a(3, new EntityPhantom.e());
|
||||
- this.targetSelector.a(1, new EntityPhantom.b());
|
||||
+ // Purpur start
|
||||
+ if (net.pl3x.purpur.PurpurConfig.phantomsOrbitCrystalsRadius > 0) {
|
||||
+ if (world.purpurConfig.phantomOrbitCrystalRadius > 0) {
|
||||
+ this.goalSelector.a(1, new FindCrystalGoal(this));
|
||||
+ this.goalSelector.a(2, new OrbitCrystalGoal(this));
|
||||
+ }
|
||||
+ this.goalSelector.a(3, new EntityPhantom.c()); // PickAttackGoal
|
||||
+ this.goalSelector.a(4, new EntityPhantom.i()); // SweepAttackGoal
|
||||
+ this.goalSelector.a(5, new EntityPhantom.e()); // OrbitPointGoal
|
||||
this.targetSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
|
||||
- this.targetSelector.a(1, new EntityPhantom.b());
|
||||
+ this.targetSelector.a(1, new EntityPhantom.b()); // AttackPlayerGoal
|
||||
+ // Purpur end
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -115,6 +122,26 @@ public class EntityPhantom extends EntityFlying implements IMonster {
|
||||
@@ -140,6 +147,26 @@ public class EntityPhantom extends EntityFlying implements IMonster {
|
||||
super.mobTick();
|
||||
}
|
||||
|
||||
@@ -188,7 +190,7 @@ index 82323bf4a..052a741c0 100644
|
||||
@Override
|
||||
public GroupDataEntity prepare(GeneratorAccess generatoraccess, DifficultyDamageScaler difficultydamagescaler, EnumMobSpawn enummobspawn, @Nullable GroupDataEntity groupdataentity, @Nullable NBTTagCompound nbttagcompound) {
|
||||
this.d = (new BlockPosition(this)).up(5);
|
||||
@@ -203,6 +230,135 @@ public class EntityPhantom extends EntityFlying implements IMonster {
|
||||
@@ -228,6 +255,136 @@ public class EntityPhantom extends EntityFlying implements IMonster {
|
||||
}
|
||||
// Paper end
|
||||
|
||||
@@ -201,6 +203,7 @@ index 82323bf4a..052a741c0 100644
|
||||
+ FindCrystalGoal(EntityPhantom phantom) {
|
||||
+ this.phantom = phantom;
|
||||
+ comparator = java.util.Comparator.comparingDouble(phantom::h);
|
||||
+ this.a(EnumSet.of(PathfinderGoal.Type.LOOK));
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
@@ -241,7 +244,7 @@ index 82323bf4a..052a741c0 100644
|
||||
+ }
|
||||
+
|
||||
+ private double maxTargetRange() {
|
||||
+ return net.pl3x.purpur.PurpurConfig.phantomsOrbitCrystalsRadius;
|
||||
+ return phantom.world.purpurConfig.phantomOrbitCrystalRadius;
|
||||
+ }
|
||||
+
|
||||
+ class DistanceComparator implements java.util.Comparator<Entity> {
|
||||
@@ -298,14 +301,14 @@ index 82323bf4a..052a741c0 100644
|
||||
+ this.offset = phantom.random.nextFloat() * 2.0F * 3.1415927F;
|
||||
+ updateOffset();
|
||||
+ }
|
||||
+ if (phantom.getHomeOffset().c(phantom.locX, phantom.locY, phantom.locZ) < 4.0D) {
|
||||
+ if (phantom.getHomeOffset().c(phantom.locX(), phantom.locY(), phantom.locZ()) < 4.0D) {
|
||||
+ updateOffset();
|
||||
+ }
|
||||
+ if (phantom.getHomeOffset().y < phantom.locY && !phantom.world.isEmpty((new BlockPosition(phantom)).down(1))) {
|
||||
+ if (phantom.getHomeOffset().y < phantom.locY() && !phantom.world.isEmpty((new BlockPosition(phantom)).down(1))) {
|
||||
+ this.verticalChange = Math.max(1.0F, this.verticalChange);
|
||||
+ updateOffset();
|
||||
+ }
|
||||
+ if (phantom.getHomeOffset().y > phantom.locY && !phantom.world.isEmpty((new BlockPosition(phantom)).up(1))) {
|
||||
+ if (phantom.getHomeOffset().y > phantom.locY() && !phantom.world.isEmpty((new BlockPosition(phantom)).up(1))) {
|
||||
+ this.verticalChange = Math.min(-1.0F, this.verticalChange);
|
||||
+ updateOffset();
|
||||
+ }
|
||||
@@ -324,42 +327,32 @@ index 82323bf4a..052a741c0 100644
|
||||
class b extends PathfinderGoal {
|
||||
|
||||
private final PathfinderTargetCondition b;
|
||||
@@ -260,7 +416,7 @@ public class EntityPhantom extends EntityFlying implements IMonster {
|
||||
public boolean a() {
|
||||
EntityLiving entityliving = EntityPhantom.this.getGoalTarget();
|
||||
|
||||
- return entityliving != null ? EntityPhantom.this.a(EntityPhantom.this.getGoalTarget(), PathfinderTargetCondition.a) : false;
|
||||
+ return !isCirclingCrystal() && entityliving != null && EntityPhantom.this.a(EntityPhantom.this.getGoalTarget(), PathfinderTargetCondition.a); // Purpur
|
||||
@@ -236,6 +393,7 @@ public class EntityPhantom extends EntityFlying implements IMonster {
|
||||
private b() {
|
||||
this.b = (new PathfinderTargetCondition()).a(64.0D);
|
||||
this.c = 20;
|
||||
+ this.a(EnumSet.of(PathfinderGoal.Type.TARGET)); // Purpur
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -306,11 +462,16 @@ public class EntityPhantom extends EntityFlying implements IMonster {
|
||||
@@ -280,7 +438,7 @@ public class EntityPhantom extends EntityFlying implements IMonster {
|
||||
|
||||
private int b;
|
||||
|
||||
- private c() {}
|
||||
+ private c() { this.a(EnumSet.of(PathfinderGoal.Type.MOVE, PathfinderGoal.Type.LOOK)); } // Purpur
|
||||
|
||||
@Override
|
||||
public boolean a() {
|
||||
- return EntityPhantom.this.getGoalTarget() != null && EntityPhantom.this.bw == EntityPhantom.AttackPhase.SWOOP;
|
||||
+ return !isCirclingCrystal() && EntityPhantom.this.getGoalTarget() != null && EntityPhantom.this.getAttackPhase() == EntityPhantom.AttackPhase.SWOOP; // Purpur
|
||||
@@ -465,7 +623,7 @@ public class EntityPhantom extends EntityFlying implements IMonster {
|
||||
abstract class h extends PathfinderGoal {
|
||||
|
||||
public h() {
|
||||
- this.a(EnumSet.of(PathfinderGoal.Type.MOVE));
|
||||
+ this.a(EnumSet.of(PathfinderGoal.Type.MOVE, PathfinderGoal.Type.LOOK));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean b() {
|
||||
+ // Purpur start
|
||||
+ if (isCirclingCrystal()) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
EntityLiving entityliving = EntityPhantom.this.getGoalTarget();
|
||||
|
||||
if (entityliving == null) {
|
||||
@@ -380,7 +541,7 @@ public class EntityPhantom extends EntityFlying implements IMonster {
|
||||
|
||||
@Override
|
||||
public boolean a() {
|
||||
- return EntityPhantom.this.getGoalTarget() == null || EntityPhantom.this.bw == EntityPhantom.AttackPhase.CIRCLE;
|
||||
+ return !isCirclingCrystal() && EntityPhantom.this.getGoalTarget() == null || EntityPhantom.this.getAttackPhase() == EntityPhantom.AttackPhase.CIRCLE; // Purpur
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean g() {
|
||||
diff --git a/src/main/java/net/minecraft/server/IEntityAccess.java b/src/main/java/net/minecraft/server/IEntityAccess.java
|
||||
index 4157e50e4..774ec96f0 100644
|
||||
--- a/src/main/java/net/minecraft/server/IEntityAccess.java
|
||||
@@ -372,26 +365,30 @@ index 4157e50e4..774ec96f0 100644
|
||||
default <T extends Entity> List<T> a(Class<? extends T> oclass, AxisAlignedBB axisalignedbb) {
|
||||
return this.a(oclass, axisalignedbb, IEntitySelector.f);
|
||||
}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index 0c408a10c..960361ff7 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -136,6 +136,15 @@ public class PurpurConfig {
|
||||
feedMushroomsToCows = getInt("settings.mobs.cow.feed-mushrooms-for-mooshroom", feedMushroomsToCows);
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 90aa470c2..8fdc6feb6 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -389,6 +389,9 @@ public class PurpurWorldConfig {
|
||||
public double phantomMaxY = 256D;
|
||||
public boolean phantomIgnoreCreative = false;
|
||||
public boolean phantomOnlyAttackInsomniacs = false;
|
||||
+ public double phantomAttackedByCrystalRadius = 0.0D;
|
||||
+ public float phantomAttackedByCrystalDamage = 1.0F;
|
||||
+ public double phantomOrbitCrystalRadius = 0.0D;
|
||||
private void phantomSettings() {
|
||||
phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable);
|
||||
phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater);
|
||||
@@ -396,6 +399,9 @@ public class PurpurWorldConfig {
|
||||
phantomMaxY = getDouble("mobs.phantom.ridable-max-y", phantomMaxY);
|
||||
phantomIgnoreCreative = getBoolean("mobs.phantom.do-not-spawn-on-creative-players", phantomIgnoreCreative);
|
||||
phantomOnlyAttackInsomniacs = getBoolean("mobs.phantom.only-attack-insomniacs", phantomOnlyAttackInsomniacs);
|
||||
+ phantomAttackedByCrystalRadius = getDouble("mobs.phantom.attacked-by-crystal-range", phantomAttackedByCrystalRadius);
|
||||
+ phantomAttackedByCrystalDamage = (float) getDouble("mobs.phantom.attacked-by-crystal-damage", phantomAttackedByCrystalDamage);
|
||||
+ phantomOrbitCrystalRadius = getDouble("mobs.phantom.orbit-crystal-radius", phantomOrbitCrystalRadius);
|
||||
}
|
||||
|
||||
+ public static double crystalsAttackPhantomsRadius = 0.0D;
|
||||
+ public static float crystalsAttackPhantomDamage = 1.0F;
|
||||
+ public static double phantomsOrbitCrystalsRadius = 0.0D;
|
||||
+ private static void phantomSettings() {
|
||||
+ crystalsAttackPhantomsRadius = getDouble("settings.mobs.phantom.crystals-attack-range", crystalsAttackPhantomsRadius);
|
||||
+ crystalsAttackPhantomDamage = (float) getDouble("settings.mobs.phantom.crystals-attack-damage", crystalsAttackPhantomDamage);
|
||||
+ phantomsOrbitCrystalsRadius = getDouble("settings.mobs.phantom.orbit-crystal-radius", phantomsOrbitCrystalsRadius);
|
||||
+ }
|
||||
+
|
||||
public static boolean snowmanDropsPumpkin = false;
|
||||
public static boolean snowmanPumpkinPutBack = false;
|
||||
private static void snowmansSettings() {
|
||||
public boolean pigRidable = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
71
patches/server/0021-Snowman-drop-and-put-back-pumpkin.patch
Normal file
71
patches/server/0021-Snowman-drop-and-put-back-pumpkin.patch
Normal file
@@ -0,0 +1,71 @@
|
||||
From f2b33d12cf5351e7325eabec875d10ecc2eae366 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Fri, 3 May 2019 23:58:44 -0500
|
||||
Subject: [PATCH] Snowman drop and put back pumpkin
|
||||
|
||||
---
|
||||
.../net/minecraft/server/EntitySnowman.java | 17 +++++++++++++++++
|
||||
.../java/net/pl3x/purpur/PurpurWorldConfig.java | 4 ++++
|
||||
2 files changed, 21 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntitySnowman.java b/src/main/java/net/minecraft/server/EntitySnowman.java
|
||||
index 941873513..efc2205f7 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntitySnowman.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntitySnowman.java
|
||||
@@ -8,6 +8,7 @@ import org.bukkit.event.player.PlayerShearEntityEvent;
|
||||
|
||||
public class EntitySnowman extends EntityGolem implements IRangedEntity {
|
||||
|
||||
+ private static final RecipeItemStack PUMPKIN = RecipeItemStack.a(Blocks.PUMPKIN.getItem(), Blocks.CARVED_PUMPKIN.getItem(), Blocks.JACK_O_LANTERN.getItem()); // Purpur
|
||||
private static final DataWatcherObject<Byte> b = DataWatcher.a(EntitySnowman.class, DataWatcherRegistry.a);
|
||||
|
||||
public EntitySnowman(EntityTypes<? extends EntitySnowman> entitytypes, World world) {
|
||||
@@ -146,9 +147,25 @@ public class EntitySnowman extends EntityGolem implements IRangedEntity {
|
||||
itemstack.damage(1, entityhuman, (entityhuman1) -> {
|
||||
entityhuman1.broadcastItemBreak(enumhand);
|
||||
});
|
||||
+ // Purpur start
|
||||
+ if (world.purpurConfig.snowGolemDropsPumpkin) {
|
||||
+ EntityItem pumpkin = new EntityItem(world, locX(), locY(), locZ(), new ItemStack(Blocks.CARVED_PUMPKIN.getItem()));
|
||||
+ pumpkin.pickupDelay = 10;
|
||||
+ world.addEntity(pumpkin);
|
||||
+ return true;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
}
|
||||
|
||||
return true;
|
||||
+ // Purpur start
|
||||
+ } else if (world.purpurConfig.snowGolemPutPumpkinBack && !hasPumpkin() && PUMPKIN.test(itemstack)) {
|
||||
+ setHasPumpkin(true);
|
||||
+ if (!entityhuman.abilities.canInstantlyBuild) {
|
||||
+ itemstack.subtract(1);
|
||||
+ }
|
||||
+ return true;
|
||||
+ // Purpur end
|
||||
} else {
|
||||
return tryRide(entityhuman, enumhand); // Purpur
|
||||
}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 8fdc6feb6..501544b67 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -527,11 +527,15 @@ public class PurpurWorldConfig {
|
||||
public boolean snowGolemRidableInWater = false;
|
||||
public boolean snowGolemRequireShiftToMount = true;
|
||||
public boolean snowGolemLeaveTrailWhenRidden = false;
|
||||
+ public boolean snowGolemDropsPumpkin = false;
|
||||
+ public boolean snowGolemPutPumpkinBack = false;
|
||||
private void snowGolemSettings() {
|
||||
snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable);
|
||||
snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater);
|
||||
snowGolemRequireShiftToMount = getBoolean("mobs.snow_golem.require-shift-to-mount", snowGolemRequireShiftToMount);
|
||||
snowGolemLeaveTrailWhenRidden = getBoolean("mobs.snow_golem.leave-trail-when-ridden", snowGolemLeaveTrailWhenRidden);
|
||||
+ snowGolemDropsPumpkin = getBoolean("mobs.snow_golem.drop-pumpkin-when-sheared", snowGolemDropsPumpkin);
|
||||
+ snowGolemPutPumpkinBack = getBoolean("mobs.snow_golem.pumpkin-can-be-added-back", snowGolemPutPumpkinBack);
|
||||
}
|
||||
|
||||
public boolean spiderRidable = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
From 306aa7d682962a0ec6bf1b304d839f07481420f2 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 1 Jun 2019 01:16:35 -0500
|
||||
Subject: [PATCH] Always place dragon egg when dragon is killed
|
||||
From 10df2782f37524de4bbbc19fa205049fe4476a9a Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
||||
Date: Fri, 7 Feb 2020 04:42:57 -0600
|
||||
Subject: [PATCH] Ender dragon always drop egg
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EnderDragonBattle.java | 4 ++--
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 5 +++++
|
||||
2 files changed, 7 insertions(+), 2 deletions(-)
|
||||
src/main/java/net/minecraft/server/EnderDragonBattle.java | 5 +++--
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 2 ++
|
||||
2 files changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EnderDragonBattle.java b/src/main/java/net/minecraft/server/EnderDragonBattle.java
|
||||
index 218c04245b..a2dfdc23f1 100644
|
||||
index 218c04245..48398aa9f 100644
|
||||
--- a/src/main/java/net/minecraft/server/EnderDragonBattle.java
|
||||
+++ b/src/main/java/net/minecraft/server/EnderDragonBattle.java
|
||||
@@ -21,7 +21,7 @@ public class EnderDragonBattle {
|
||||
@@ -26,24 +26,36 @@ index 218c04245b..a2dfdc23f1 100644
|
||||
this.a(true);
|
||||
this.n();
|
||||
- if (!this.l) {
|
||||
+ if (getWorld().purpurConfig.enderDragonAlwaysDropsEggBlock || !this.l) { // Purpur - always place dragon egg
|
||||
+ if (getWorld().purpurConfig.enderDragonAlwaysDropsEggBlock || !wasPreviouslyKilled()) { // Purpur - always place dragon egg
|
||||
this.d.setTypeUpdate(this.d.getHighestBlockYAt(HeightMap.Type.MOTION_BLOCKING, WorldGenEndTrophy.a), Blocks.DRAGON_EGG.getBlockData());
|
||||
}
|
||||
|
||||
@@ -439,6 +439,7 @@ public class EnderDragonBattle {
|
||||
|
||||
}
|
||||
|
||||
+ public boolean wasPreviouslyKilled() { return d(); } // Purpur - OBFHELPER;
|
||||
public boolean d() {
|
||||
return this.l;
|
||||
}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 061b02e45a..ea5c898966 100644
|
||||
index 501544b67..b763c1144 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -100,4 +100,9 @@ public class PurpurWorldConfig {
|
||||
private void allowSignColors() {
|
||||
allowSignColors = getBoolean("allow-sign-colors", allowSignColors);
|
||||
}
|
||||
+
|
||||
@@ -193,11 +193,13 @@ public class PurpurWorldConfig {
|
||||
public boolean enderDragonRidableInWater = false;
|
||||
public boolean enderDragonRequireShiftToMount = true;
|
||||
public double enderDragonMaxY = 256D;
|
||||
+ public boolean enderDragonAlwaysDropsEggBlock = false;
|
||||
+ private void enderDragonSettings() {
|
||||
+ enderDragonAlwaysDropsEggBlock = getBoolean("mobs.ender-dragon.always-drop-egg-block", enderDragonAlwaysDropsEggBlock);
|
||||
+ }
|
||||
}
|
||||
private void enderDragonSettings() {
|
||||
enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable);
|
||||
enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater);
|
||||
enderDragonRequireShiftToMount = getBoolean("mobs.ender_dragon.require-shift-to-mount", enderDragonRequireShiftToMount);
|
||||
enderDragonMaxY = getDouble("mobs.ender_dragon.ridable-max-y", enderDragonMaxY);
|
||||
+ enderDragonAlwaysDropsEggBlock = getBoolean("mobs.ender_dragon.always-drop-egg-block", enderDragonAlwaysDropsEggBlock);
|
||||
}
|
||||
|
||||
public boolean endermanRidable = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
From e0633c984825e440db28131ccbb54dbbe0509b56 Mon Sep 17 00:00:00 2001
|
||||
From c060bea28492eb0d1f241b19d86c6179f3515913 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 24 Aug 2019 14:42:54 -0500
|
||||
Subject: [PATCH] Ender Dragon always drops full exp
|
||||
Subject: [PATCH] Ender dragon always drop full exp
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityEnderDragon.java | 2 +-
|
||||
@@ -9,33 +9,37 @@ Subject: [PATCH] Ender Dragon always drops full exp
|
||||
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityEnderDragon.java b/src/main/java/net/minecraft/server/EntityEnderDragon.java
|
||||
index 5935ecb529..19395a9349 100644
|
||||
index 9cba1b6c8..5aea40279 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityEnderDragon.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityEnderDragon.java
|
||||
@@ -567,7 +567,7 @@ public class EntityEnderDragon extends EntityInsentient implements IMonster {
|
||||
@@ -588,7 +588,7 @@ public class EntityEnderDragon extends EntityInsentient implements IMonster {
|
||||
boolean flag = this.world.getGameRules().getBoolean(GameRules.DO_MOB_LOOT);
|
||||
short short0 = 500;
|
||||
|
||||
- if (this.bN != null && !this.bN.d()) {
|
||||
+ if (world.purpurConfig.enderDragonAlwaysDropsFullExp || (this.bN != null && !this.bN.d())) { // Purpur
|
||||
+ if (getEnderDragonBattle() != null && (world.purpurConfig.enderDragonAlwaysDropsFullExp || !getEnderDragonBattle().wasPreviouslyKilled())) { // Purpur
|
||||
short0 = 12000;
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index c6ff074b14..0eb8f8bfa5 100644
|
||||
index b763c1144..c8ab99876 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -152,8 +152,10 @@ public class PurpurWorldConfig {
|
||||
}
|
||||
|
||||
@@ -194,12 +194,14 @@ public class PurpurWorldConfig {
|
||||
public boolean enderDragonRequireShiftToMount = true;
|
||||
public double enderDragonMaxY = 256D;
|
||||
public boolean enderDragonAlwaysDropsEggBlock = false;
|
||||
+ public boolean enderDragonAlwaysDropsFullExp = false;
|
||||
private void enderDragonSettings() {
|
||||
enderDragonAlwaysDropsEggBlock = getBoolean("mobs.ender-dragon.always-drop-egg-block", enderDragonAlwaysDropsEggBlock);
|
||||
+ enderDragonAlwaysDropsFullExp = getBoolean("mobs.ender-dragon.always-drop-full-exp", enderDragonAlwaysDropsFullExp);
|
||||
enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable);
|
||||
enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater);
|
||||
enderDragonRequireShiftToMount = getBoolean("mobs.ender_dragon.require-shift-to-mount", enderDragonRequireShiftToMount);
|
||||
enderDragonMaxY = getDouble("mobs.ender_dragon.ridable-max-y", enderDragonMaxY);
|
||||
enderDragonAlwaysDropsEggBlock = getBoolean("mobs.ender_dragon.always-drop-egg-block", enderDragonAlwaysDropsEggBlock);
|
||||
+ enderDragonAlwaysDropsFullExp = getBoolean("mobs.ender_dragon.always-drop-full-exp", enderDragonAlwaysDropsFullExp);
|
||||
}
|
||||
|
||||
public boolean foxTypeChangesWithTulips = true;
|
||||
public boolean endermanRidable = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
From 8c3f3ab3cbe85b4c194aae321aa9123e31f034f3 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Thu, 6 Jun 2019 22:15:46 -0500
|
||||
Subject: [PATCH] Add config for items breaking turtle eggs
|
||||
|
||||
---
|
||||
.../java/net/minecraft/server/BlockTurtleEgg.java | 13 ++++++++++++-
|
||||
.../java/net/pl3x/purpur/PurpurWorldConfig.java | 5 +++++
|
||||
2 files changed, 17 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockTurtleEgg.java b/src/main/java/net/minecraft/server/BlockTurtleEgg.java
|
||||
index cb36334e41..238d260b5f 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockTurtleEgg.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockTurtleEgg.java
|
||||
@@ -157,6 +157,17 @@ public class BlockTurtleEgg extends Block {
|
||||
}
|
||||
|
||||
private boolean a(World world, Entity entity) {
|
||||
- return entity instanceof EntityTurtle ? false : (entity instanceof EntityLiving && !(entity instanceof EntityHuman) ? world.getGameRules().getBoolean(GameRules.MOB_GRIEFING) : true);
|
||||
+ // Purpur start
|
||||
+ if (entity instanceof EntityTurtle) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ if (!world.purpurConfig.itemsCanBreakTurtleEggs && entity instanceof EntityItem) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ if (entity instanceof EntityLiving && !(entity instanceof EntityHuman)) {
|
||||
+ return world.getGameRules().getBoolean(GameRules.MOB_GRIEFING);
|
||||
+ }
|
||||
+ return true;
|
||||
+ // Purpur end
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index ea5c898966..7544b6a2af 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -101,6 +101,11 @@ public class PurpurWorldConfig {
|
||||
allowSignColors = getBoolean("allow-sign-colors", allowSignColors);
|
||||
}
|
||||
|
||||
+ public boolean itemsCanBreakTurtleEggs = false;
|
||||
+ private void itemsCanBreakTurtleEggs() {
|
||||
+ itemsCanBreakTurtleEggs = getBoolean("items-can-break-turtle-eggs", itemsCanBreakTurtleEggs);
|
||||
+ }
|
||||
+
|
||||
public boolean enderDragonAlwaysDropsEggBlock = false;
|
||||
private void enderDragonSettings() {
|
||||
enderDragonAlwaysDropsEggBlock = getBoolean("mobs.ender-dragon.always-drop-egg-block", enderDragonAlwaysDropsEggBlock);
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
From 781d16718818af366e999bbc01453d18ee3d820f Mon Sep 17 00:00:00 2001
|
||||
From b2b381adee2dad546990d557c08ce8a0f24b3a35 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Fri, 24 May 2019 02:39:25 -0500
|
||||
Subject: [PATCH] Right click to open sign editor
|
||||
Subject: [PATCH] Signs editable on right click
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/BlockSign.java | 11 +++++++++++
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 5 +++++
|
||||
2 files changed, 16 insertions(+)
|
||||
src/main/java/net/minecraft/server/BlockSign.java | 11 +++++++++++
|
||||
.../java/net/minecraft/server/TileEntitySign.java | 1 +
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 5 +++++
|
||||
3 files changed, 17 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockSign.java b/src/main/java/net/minecraft/server/BlockSign.java
|
||||
index 8a31054a1d..503090e38a 100644
|
||||
index 8a31054a1..d20849ce2 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockSign.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockSign.java
|
||||
@@ -56,6 +56,17 @@ public abstract class BlockSign extends BlockTileEntity implements IBlockWaterlo
|
||||
@@ -17,9 +18,9 @@ index 8a31054a1d..503090e38a 100644
|
||||
}
|
||||
|
||||
+ // Purpur start - right click to open sign editor
|
||||
+ if (world.purpurConfig.editableSigns && itemstack.getItem() instanceof ItemSign &&
|
||||
+ if (world.purpurConfig.signRightClickEdit && itemstack.getItem() instanceof ItemSign &&
|
||||
+ !entityhuman.isSneaking() && entityhuman.abilities.mayBuild &&
|
||||
+ entityhuman.getBukkitEntity().hasPermission("purpur.sign.click.opens.editor")) {
|
||||
+ entityhuman.getBukkitEntity().hasPermission("purpur.sign.edit")) {
|
||||
+ tileentitysign.isEditable = true;
|
||||
+ tileentitysign.a(entityhuman);
|
||||
+ entityhuman.openSign(tileentitysign);
|
||||
@@ -30,22 +31,34 @@ index 8a31054a1d..503090e38a 100644
|
||||
return tileentitysign.b(entityhuman) ? EnumInteractionResult.SUCCESS : EnumInteractionResult.PASS;
|
||||
} else {
|
||||
return EnumInteractionResult.PASS;
|
||||
diff --git a/src/main/java/net/minecraft/server/TileEntitySign.java b/src/main/java/net/minecraft/server/TileEntitySign.java
|
||||
index 0e9a90b70..099d98e04 100644
|
||||
--- a/src/main/java/net/minecraft/server/TileEntitySign.java
|
||||
+++ b/src/main/java/net/minecraft/server/TileEntitySign.java
|
||||
@@ -109,6 +109,7 @@ public class TileEntitySign extends TileEntity implements ICommandListener { //
|
||||
return this.isEditable;
|
||||
}
|
||||
|
||||
+ public void setEditor(EntityHuman entityhuman) { a(entityhuman); } // Purpur - OBFHELPER
|
||||
public void a(EntityHuman entityhuman) {
|
||||
// Paper start
|
||||
//this.c = entityhuman;
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 6a9647367f..6cb887ca8b 100644
|
||||
index c8ab99876..ad689ce64 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -58,6 +58,11 @@ public class PurpurWorldConfig {
|
||||
return PurpurConfig.config.getString("world-settings." + worldName + "." + path, PurpurConfig.config.getString("world-settings.default." + path));
|
||||
}
|
||||
|
||||
+ public boolean editableSigns = false;
|
||||
+ private void editableSigns() {
|
||||
+ editableSigns = getBoolean("editable-signs", editableSigns);
|
||||
+ public boolean signRightClickEdit = false;
|
||||
+ private void signSettings() {
|
||||
+ signRightClickEdit = getBoolean("blocks.sign.right-click-edit", signRightClickEdit);
|
||||
+ }
|
||||
+
|
||||
public boolean campfireObeysGravity = true;
|
||||
private void campfireObeysGravity() {
|
||||
campfireObeysGravity = getBoolean("campfire-obeys-gravity", campfireObeysGravity);
|
||||
public boolean batRidable = false;
|
||||
public boolean batRidableInWater = false;
|
||||
public boolean batRequireShiftToMount = true;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From e8610bacd36a293a676ef5c17a290093d0d10f98 Mon Sep 17 00:00:00 2001
|
||||
From 61a33a09d61e1e9585651382352ca544f33f5d21 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Tue, 4 Jun 2019 15:50:08 -0500
|
||||
Subject: [PATCH] Fix 'outdated server' showing in ping before server fully
|
||||
@@ -9,7 +9,7 @@ Subject: [PATCH] Fix 'outdated server' showing in ping before server fully
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PacketStatusListener.java b/src/main/java/net/minecraft/server/PacketStatusListener.java
|
||||
index 295c9ac22..981ded17a 100644
|
||||
index 4bb21c48b..30f16db02 100644
|
||||
--- a/src/main/java/net/minecraft/server/PacketStatusListener.java
|
||||
+++ b/src/main/java/net/minecraft/server/PacketStatusListener.java
|
||||
@@ -135,6 +135,7 @@ public class PacketStatusListener implements PacketStatusInListener {
|
||||
@@ -21,5 +21,5 @@ index 295c9ac22..981ded17a 100644
|
||||
// Paper end
|
||||
}
|
||||
--
|
||||
2.23.0.rc1
|
||||
2.24.0
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
From cba4d0db3f9bee98b1149a3c1a680ba66bf56070 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 15 Jun 2019 03:12:15 -0500
|
||||
Subject: [PATCH] Make Iron Golems Swim
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityIronGolem.java | 1 +
|
||||
src/main/java/net/pl3x/purpur/PurpurConfig.java | 5 +++++
|
||||
2 files changed, 6 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityIronGolem.java b/src/main/java/net/minecraft/server/EntityIronGolem.java
|
||||
index 63b88f454b..dbdc200ec3 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityIronGolem.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityIronGolem.java
|
||||
@@ -20,6 +20,7 @@ public class EntityIronGolem extends EntityGolem {
|
||||
|
||||
@Override
|
||||
protected void initPathfinder() {
|
||||
+ if (net.pl3x.purpur.PurpurConfig.ironGolemSwims) this.goalSelector.a(0, new PathfinderGoalFloat(this)); // Purpur
|
||||
this.goalSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
|
||||
this.goalSelector.a(1, new PathfinderGoalMeleeAttack(this, 1.0D, true));
|
||||
this.goalSelector.a(2, new PathfinderGoalMoveTowardsTarget(this, 0.9D, 32.0F));
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index 19fe36b0ba..26c855b1cc 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -149,6 +149,11 @@ public class PurpurConfig {
|
||||
giantsHaveAI = getBoolean("settings.mobs.giant.have-ai", giantsHaveAI);
|
||||
}
|
||||
|
||||
+ public static boolean ironGolemSwims = true;
|
||||
+ private static void ironGolemSettings() {
|
||||
+ ironGolemSwims = getBoolean("settings.mobs.iron_golem.swims", ironGolemSwims);
|
||||
+ }
|
||||
+
|
||||
public static double crystalsAttackPhantomsRadius = 0.0D;
|
||||
public static float crystalsAttackPhantomDamage = 1.0F;
|
||||
public static double phantomsOrbitCrystalsRadius = 0.0D;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
From 48f1cec737b154364f4208bf7d38eae157aa0b7a Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Thu, 6 Jun 2019 22:15:46 -0500
|
||||
Subject: [PATCH] Add turtle egg block options - fixes MC-168772
|
||||
|
||||
---
|
||||
.../net/minecraft/server/BlockTurtleEgg.java | 19 ++++++++++++++++++-
|
||||
.../net/pl3x/purpur/PurpurWorldConfig.java | 9 +++++++++
|
||||
2 files changed, 27 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockTurtleEgg.java b/src/main/java/net/minecraft/server/BlockTurtleEgg.java
|
||||
index cb36334e4..aa83ef169 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockTurtleEgg.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockTurtleEgg.java
|
||||
@@ -157,6 +157,23 @@ public class BlockTurtleEgg extends Block {
|
||||
}
|
||||
|
||||
private boolean a(World world, Entity entity) {
|
||||
- return entity instanceof EntityTurtle ? false : (entity instanceof EntityLiving && !(entity instanceof EntityHuman) ? world.getGameRules().getBoolean(GameRules.MOB_GRIEFING) : true);
|
||||
+ // Purpur start - fix MC-168772
|
||||
+ if (entity instanceof EntityTurtle) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ if (!world.purpurConfig.turtleEggsBreakFromExpOrbs && entity instanceof EntityExperienceOrb) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ if (!world.purpurConfig.turtleEggsBreakFromItems && entity instanceof EntityItem) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ if (!world.purpurConfig.turtleEggsBreakFromMinecarts && entity instanceof EntityMinecartAbstract) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ if (entity instanceof EntityLiving && !(entity instanceof EntityHuman)) {
|
||||
+ return world.getGameRules().getBoolean(GameRules.MOB_GRIEFING);
|
||||
+ }
|
||||
+ return true;
|
||||
+ // Purpur end
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index ad689ce64..737eecb34 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -63,6 +63,15 @@ public class PurpurWorldConfig {
|
||||
signRightClickEdit = getBoolean("blocks.sign.right-click-edit", signRightClickEdit);
|
||||
}
|
||||
|
||||
+ public boolean turtleEggsBreakFromExpOrbs = true;
|
||||
+ public boolean turtleEggsBreakFromItems = true;
|
||||
+ public boolean turtleEggsBreakFromMinecarts = true;
|
||||
+ private void turtleEggSettings() {
|
||||
+ turtleEggsBreakFromExpOrbs = getBoolean("blocks.turtle_egg.break-from-exp-orbs", turtleEggsBreakFromExpOrbs);
|
||||
+ turtleEggsBreakFromItems = getBoolean("blocks.turtle_egg.break-from-items", turtleEggsBreakFromItems);
|
||||
+ turtleEggsBreakFromMinecarts = getBoolean("blocks.turtle_egg.break-from-minecarts", turtleEggsBreakFromMinecarts);
|
||||
+ }
|
||||
+
|
||||
public boolean batRidable = false;
|
||||
public boolean batRidableInWater = false;
|
||||
public boolean batRequireShiftToMount = true;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
42
patches/server/0027-Make-Iron-Golems-Swim.patch
Normal file
42
patches/server/0027-Make-Iron-Golems-Swim.patch
Normal file
@@ -0,0 +1,42 @@
|
||||
From 7ca5c1da4ff3f87675377993d9051bc7f81299e2 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 15 Jun 2019 03:12:15 -0500
|
||||
Subject: [PATCH] Make Iron Golems Swim
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityIronGolem.java | 1 +
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 2 ++
|
||||
2 files changed, 3 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityIronGolem.java b/src/main/java/net/minecraft/server/EntityIronGolem.java
|
||||
index 46e4574e5..5414d6975 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityIronGolem.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityIronGolem.java
|
||||
@@ -36,6 +36,7 @@ public class EntityIronGolem extends EntityGolem {
|
||||
|
||||
@Override
|
||||
protected void initPathfinder() {
|
||||
+ if (world.purpurConfig.ironGolemCanSwim) this.goalSelector.a(0, new PathfinderGoalFloat(this)); // Purpur
|
||||
this.goalSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
|
||||
this.goalSelector.a(1, new PathfinderGoalMeleeAttack(this, 1.0D, true));
|
||||
this.goalSelector.a(2, new PathfinderGoalMoveTowardsTarget(this, 0.9D, 32.0F));
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 737eecb34..2d51bbab2 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -333,10 +333,12 @@ public class PurpurWorldConfig {
|
||||
public boolean ironGolemRidable = false;
|
||||
public boolean ironGolemRidableInWater = false;
|
||||
public boolean ironGolemRequireShiftToMount = true;
|
||||
+ public boolean ironGolemCanSwim = false;
|
||||
private void ironGolemSettings() {
|
||||
ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable);
|
||||
ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater);
|
||||
ironGolemRequireShiftToMount = getBoolean("mobs.iron_golem.require-shift-to-mount", ironGolemRequireShiftToMount);
|
||||
+ ironGolemCanSwim = getBoolean("mobs.iron_golem.can-swim", ironGolemCanSwim);
|
||||
}
|
||||
|
||||
public boolean llamaRidableInWater = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,18 +1,25 @@
|
||||
From 9e94791f4f71f4927a305d6337ab0f81689fffbd Mon Sep 17 00:00:00 2001
|
||||
From ad1e1785cf2030005ea52d37819ee00489ffaf05 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Fri, 21 Jun 2019 14:37:10 -0500
|
||||
Subject: [PATCH] Allow soil to moisten from water directly under it
|
||||
|
||||
---
|
||||
.../java/net/minecraft/server/BlockSoil.java | 19 +++++++------------
|
||||
.../java/net/minecraft/server/BlockSoil.java | 20 +++++++------------
|
||||
.../net/pl3x/purpur/PurpurWorldConfig.java | 5 +++++
|
||||
2 files changed, 12 insertions(+), 12 deletions(-)
|
||||
2 files changed, 12 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockSoil.java b/src/main/java/net/minecraft/server/BlockSoil.java
|
||||
index b6561f2c79..e3814b6270 100644
|
||||
index b6561f2c7..f2ab3ee01 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockSoil.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockSoil.java
|
||||
@@ -112,19 +112,14 @@ public class BlockSoil extends Block {
|
||||
@@ -1,6 +1,5 @@
|
||||
package net.minecraft.server;
|
||||
|
||||
-import java.util.Iterator;
|
||||
import java.util.Random;
|
||||
|
||||
// CraftBukkit start
|
||||
@@ -112,19 +111,14 @@ public class BlockSoil extends Block {
|
||||
}
|
||||
|
||||
private static boolean a(IWorldReader iworldreader, BlockPosition blockposition) {
|
||||
@@ -34,27 +41,27 @@ index b6561f2c79..e3814b6270 100644
|
||||
-
|
||||
- return true;
|
||||
+ }
|
||||
+ return ((WorldServer)iworldreader).purpurConfig.allowMoistSoilFromWaterBelow && iworldreader.getFluid(blockposition.shift(EnumDirection.DOWN)).a(TagsFluid.WATER);
|
||||
+ return ((WorldServer) iworldreader).purpurConfig.farmlandGetsMoistFromBelow && iworldreader.getFluid(blockposition.shift(EnumDirection.DOWN)).a(TagsFluid.WATER);
|
||||
+ // Purpur end
|
||||
}
|
||||
|
||||
@Override
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 7544b6a2af..968d32900a 100644
|
||||
index 2d51bbab2..07c3952df 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -96,6 +96,11 @@ public class PurpurWorldConfig {
|
||||
campfiresGoOutInRain = getBoolean("campfires-go-out-in-rain", campfiresGoOutInRain);
|
||||
@@ -58,6 +58,11 @@ public class PurpurWorldConfig {
|
||||
return PurpurConfig.config.getString("world-settings." + worldName + "." + path, PurpurConfig.config.getString("world-settings.default." + path));
|
||||
}
|
||||
|
||||
+ public boolean allowMoistSoilFromWaterBelow = true;
|
||||
+ private void allowMoistSoilFromWaterBelow() {
|
||||
+ allowMoistSoilFromWaterBelow = getBoolean("allow-moist-soil-from-water-below", allowMoistSoilFromWaterBelow);
|
||||
+ public boolean farmlandGetsMoistFromBelow = false;
|
||||
+ private void farmlandSettings() {
|
||||
+ farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow);
|
||||
+ }
|
||||
+
|
||||
public boolean allowSignColors = false;
|
||||
private void allowSignColors() {
|
||||
allowSignColors = getBoolean("allow-sign-colors", allowSignColors);
|
||||
public boolean signRightClickEdit = false;
|
||||
private void signSettings() {
|
||||
signRightClickEdit = getBoolean("blocks.sign.right-click-edit", signRightClickEdit);
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
From 3972fecf35718134bfc2b204d0ea27c9ea9249e3 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Wed, 3 Jul 2019 23:58:31 -0500
|
||||
Subject: [PATCH] Disable loot drops on death by cramming
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityLiving.java | 2 ++
|
||||
src/main/java/net/pl3x/purpur/PurpurConfig.java | 5 +++++
|
||||
2 files changed, 7 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index 5af703bd1..38948133e 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -1383,8 +1383,10 @@ public abstract class EntityLiving extends Entity {
|
||||
this.dropInventory(); // CraftBukkit - from below
|
||||
org.bukkit.event.entity.EntityDeathEvent deathEvent; // Paper
|
||||
if (this.isDropExperience() && this.world.getGameRules().getBoolean(GameRules.DO_MOB_LOOT)) {
|
||||
+ if (!(damagesource == DamageSource.CRAMMING && net.pl3x.purpur.PurpurConfig.disableDropsOnCrammingDeath)) { // Purpur - do not drop loot if crammed to death
|
||||
this.a(damagesource, flag);
|
||||
this.dropDeathLoot(damagesource, i, flag);
|
||||
+ } // Purpur - do not drop loot if crammed to death
|
||||
// CraftBukkit start - Call death event
|
||||
deathEvent = CraftEventFactory.callEntityDeathEvent(this, this.drops); // Paper
|
||||
} else {
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index fce20c66e..d6af36146 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -136,6 +136,11 @@ public class PurpurConfig {
|
||||
return config.getString(path, config.getString(path));
|
||||
}
|
||||
|
||||
+ public static boolean disableDropsOnCrammingDeath = true;
|
||||
+ private static void disableDropsOnCrammingDeath() {
|
||||
+ disableDropsOnCrammingDeath = getBoolean("settings.disable-drops-on-cramming-death", disableDropsOnCrammingDeath);
|
||||
+ }
|
||||
+
|
||||
public static boolean requireShiftToMount = true;
|
||||
private static void requireShiftToMount() {
|
||||
requireShiftToMount = getBoolean("settings.mobs.require-shift-to-mount", requireShiftToMount);
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
From 9b406ca83d65b05cdc393d3e267b0c09837bc877 Mon Sep 17 00:00:00 2001
|
||||
From f7d4291b5564a17d4fa7fe1f13c506f60d643e9e Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 29 Jun 2019 02:32:40 -0500
|
||||
Subject: [PATCH] Controllable Minecarts
|
||||
|
||||
---
|
||||
.../java/net/minecraft/server/Entity.java | 1 +
|
||||
.../server/EntityMinecartAbstract.java | 39 +++++++++++++++++++
|
||||
.../server/EntityMinecartAbstract.java | 38 +++++++++++++++++++
|
||||
.../net/minecraft/server/ItemMinecart.java | 8 ++--
|
||||
.../java/net/pl3x/purpur/PurpurConfig.java | 30 ++++++++++++++
|
||||
4 files changed, 75 insertions(+), 3 deletions(-)
|
||||
.../net/pl3x/purpur/PurpurWorldConfig.java | 38 +++++++++++++++++++
|
||||
4 files changed, 82 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
||||
index f5b4c7e3c..6ea10fb56 100644
|
||||
index c6a97d6b5..dbd7236d8 100644
|
||||
--- a/src/main/java/net/minecraft/server/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/server/Entity.java
|
||||
@@ -1284,6 +1284,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
||||
@@ -1282,6 +1282,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
||||
this.inLava = true;
|
||||
}
|
||||
|
||||
@@ -23,18 +23,10 @@ index f5b4c7e3c..6ea10fb56 100644
|
||||
return this.inLava;
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityMinecartAbstract.java b/src/main/java/net/minecraft/server/EntityMinecartAbstract.java
|
||||
index 665bbe07f..1b982a510 100644
|
||||
index 665bbe07f..57288aa73 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityMinecartAbstract.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityMinecartAbstract.java
|
||||
@@ -8,6 +8,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
+import net.pl3x.purpur.PurpurConfig; // Purpur
|
||||
// CraftBukkit start
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Vehicle;
|
||||
@@ -357,12 +358,50 @@ public abstract class EntityMinecartAbstract extends Entity {
|
||||
@@ -357,12 +357,50 @@ public abstract class EntityMinecartAbstract extends Entity {
|
||||
|
||||
public void a(int i, int j, int k, boolean flag) {}
|
||||
|
||||
@@ -45,9 +37,9 @@ index 665bbe07f..1b982a510 100644
|
||||
+ if (!block.material.isSolid()) {
|
||||
+ block = world.getType(position.shift(EnumDirection.DOWN)).getBlock();
|
||||
+ }
|
||||
+ Double speed = PurpurConfig.controllableMinecartsBlockSpeeds.get(block);
|
||||
+ Double speed = world.purpurConfig.controllableMinecartsBlockSpeeds.get(block);
|
||||
+ if (speed == null) {
|
||||
+ speed = PurpurConfig.controllableMinecartsBaseSpeed;
|
||||
+ speed = world.purpurConfig.controllableMinecartsBaseSpeed;
|
||||
+ }
|
||||
+ return speed;
|
||||
+ }
|
||||
@@ -60,13 +52,13 @@ index 665bbe07f..1b982a510 100644
|
||||
this.setMot(MathHelper.a(vec3d.x, -d0, d0), vec3d.y, MathHelper.a(vec3d.z, -d0, d0));
|
||||
if (this.onGround) {
|
||||
+ // Purpur start
|
||||
+ if (PurpurConfig.controllableMinecarts && !isInWater() && !isInLava() && !passengers.isEmpty()) {
|
||||
+ if (world.purpurConfig.controllableMinecarts && !isInWater() && !isInLava() && !passengers.isEmpty()) {
|
||||
+ Entity passenger = passengers.get(0);
|
||||
+ if (passenger instanceof EntityHuman) {
|
||||
+ EntityHuman entityhuman = (EntityHuman) passenger;
|
||||
+ if (entityhuman.isJumping()) {
|
||||
+ Vec3D mot = getMot();
|
||||
+ setMot(mot.x, PurpurConfig.controllableMinecartsHopBoost, mot.z);
|
||||
+ setMot(mot.x, world.purpurConfig.controllableMinecartsHopBoost, mot.z);
|
||||
+ }
|
||||
+ if (entityhuman.getForward() != 0.0F) {
|
||||
+ Vector dir = entityhuman.getBukkitEntity().getEyeLocation().getDirection().normalize().multiply(getControllableSpeed());
|
||||
@@ -74,7 +66,7 @@ index 665bbe07f..1b982a510 100644
|
||||
+ dir.multiply(-0.5);
|
||||
+ }
|
||||
+ setMot(new Vec3D(dir.getX(), getMot().y, dir.getZ()));
|
||||
+ setStepHeight(PurpurConfig.controllableMinecartsStepHeight);
|
||||
+ setStepHeight(world.purpurConfig.controllableMinecartsStepHeight);
|
||||
+ } else {
|
||||
+ setStepHeight(0.0F);
|
||||
+ }
|
||||
@@ -86,7 +78,7 @@ index 665bbe07f..1b982a510 100644
|
||||
this.setMot(new Vec3D(this.getMot().x * this.derailedX, this.getMot().y * this.derailedY, this.getMot().z * this.derailedZ));
|
||||
// CraftBukkit end
|
||||
diff --git a/src/main/java/net/minecraft/server/ItemMinecart.java b/src/main/java/net/minecraft/server/ItemMinecart.java
|
||||
index b73e317fb..aa2186add 100644
|
||||
index b73e317fb..e1337a9c0 100644
|
||||
--- a/src/main/java/net/minecraft/server/ItemMinecart.java
|
||||
+++ b/src/main/java/net/minecraft/server/ItemMinecart.java
|
||||
@@ -103,8 +103,10 @@ public class ItemMinecart extends Item {
|
||||
@@ -96,7 +88,7 @@ index b73e317fb..aa2186add 100644
|
||||
- return EnumInteractionResult.FAIL;
|
||||
- } else {
|
||||
+ // Purpur start - place minecarts anywhere
|
||||
+ if (!net.pl3x.purpur.PurpurConfig.controllableMinecartsPlaceAnywhere) return EnumInteractionResult.FAIL;
|
||||
+ if (!world.purpurConfig.controllableMinecartsPlaceAnywhere) return EnumInteractionResult.FAIL;
|
||||
+ if (iblockdata.getMaterial().isSolid()) blockposition = blockposition.shift(itemactioncontext.getClickedFace());
|
||||
+ } //else { // Purpur end - place minecarts anywhere
|
||||
ItemStack itemstack = itemactioncontext.getItemStack();
|
||||
@@ -110,55 +102,72 @@ index b73e317fb..aa2186add 100644
|
||||
+ //} // Purpur - place minecarts anywhere
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index 26c855b1c..fce20c66e 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -1,9 +1,13 @@
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 07c3952df..7add97225 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -1,9 +1,16 @@
|
||||
package net.pl3x.purpur;
|
||||
|
||||
import com.google.common.base.Throwables;
|
||||
import com.destroystokyo.paper.PaperWorldConfig;
|
||||
+import net.minecraft.server.Block;
|
||||
+import net.minecraft.server.Blocks;
|
||||
+import net.minecraft.server.IRegistry;
|
||||
+import net.minecraft.server.MinecraftKey;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
+import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.configuration.InvalidConfigurationException;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
@@ -300,4 +304,30 @@ public class PurpurConfig {
|
||||
ridableZombiePigman = getBoolean("settings.ridable.zombie_pigman", ridableZombiePigman);
|
||||
ridableZombieVillager = getBoolean("settings.ridable.zombie_villager", ridableZombieVillager);
|
||||
import org.spigotmc.SpigotWorldConfig;
|
||||
|
||||
+import java.util.HashMap;
|
||||
import java.util.List;
|
||||
+import java.util.Map;
|
||||
|
||||
import static net.pl3x.purpur.PurpurConfig.log;
|
||||
|
||||
@@ -33,6 +40,11 @@ public class PurpurWorldConfig {
|
||||
}
|
||||
}
|
||||
|
||||
+ private ConfigurationSection getConfigurationSection(String path) {
|
||||
+ ConfigurationSection section = PurpurConfig.config.getConfigurationSection("world-settings." + worldName + "." + path);
|
||||
+ return section != null ? section : PurpurConfig.config.getConfigurationSection("world-settings.default." + path);
|
||||
+ }
|
||||
+
|
||||
+ public static boolean controllableMinecarts = true;
|
||||
+ public static boolean controllableMinecartsPlaceAnywhere = true;
|
||||
+ public static float controllableMinecartsStepHeight = 1.0F;
|
||||
+ public static double controllableMinecartsHopBoost = 0.5D;
|
||||
+ public static double controllableMinecartsBaseSpeed = 0.1D;
|
||||
+ public static Map<Block, Double> controllableMinecartsBlockSpeeds = new HashMap<>();
|
||||
+ private static void controllableMinecarts() {
|
||||
+ controllableMinecarts = getBoolean("settings.controllable-minecarts.enabled", controllableMinecarts);
|
||||
+ controllableMinecartsPlaceAnywhere = getBoolean("settings.controllable-minecarts.place-anywhere", controllableMinecartsPlaceAnywhere);
|
||||
+ controllableMinecartsStepHeight = (float) getDouble("settings.controllable-minecarts.step-height", controllableMinecartsStepHeight);
|
||||
+ controllableMinecartsHopBoost = getDouble("settings.controllable-minecarts.hop-boost", controllableMinecartsHopBoost);
|
||||
+ controllableMinecartsBaseSpeed = getDouble("settings.controllable-minecarts.base-speed", controllableMinecartsBaseSpeed);
|
||||
+ if (!config.contains("settings.controllable-minecarts.block-speed")) {
|
||||
+ config.createSection("settings.controllable-minecarts.block-speed");
|
||||
+ }
|
||||
+ if (controllableMinecarts) {
|
||||
+ ConfigurationSection section = config.getConfigurationSection("settings.controllable-minecarts.block-speed");
|
||||
private boolean getBoolean(String path, boolean def) {
|
||||
PurpurConfig.config.addDefault("world-settings.default." + path, def);
|
||||
return PurpurConfig.config.getBoolean("world-settings." + worldName + "." + path, PurpurConfig.config.getBoolean("world-settings.default." + path));
|
||||
@@ -77,6 +89,32 @@ public class PurpurWorldConfig {
|
||||
turtleEggsBreakFromMinecarts = getBoolean("blocks.turtle_egg.break-from-minecarts", turtleEggsBreakFromMinecarts);
|
||||
}
|
||||
|
||||
+ public boolean controllableMinecarts = false;
|
||||
+ public boolean controllableMinecartsPlaceAnywhere = false;
|
||||
+ public float controllableMinecartsStepHeight = 1.0F;
|
||||
+ public double controllableMinecartsHopBoost = 0.5D;
|
||||
+ public double controllableMinecartsBaseSpeed = 0.1D;
|
||||
+ public Map<Block, Double> controllableMinecartsBlockSpeeds = new HashMap<>();
|
||||
+ private void gameplayMechanicsSettings() {
|
||||
+ controllableMinecarts = getBoolean("gameplay-mechanics.controllable-minecarts.enabled", controllableMinecarts);
|
||||
+ controllableMinecartsPlaceAnywhere = getBoolean("gameplay-mechanics.controllable-minecarts.place-anywhere", controllableMinecartsPlaceAnywhere);
|
||||
+ controllableMinecartsStepHeight = (float) getDouble("gameplay-mechanics.controllable-minecarts.step-height", controllableMinecartsStepHeight);
|
||||
+ controllableMinecartsHopBoost = getDouble("gameplay-mechanics.controllable-minecarts.hop-boost", controllableMinecartsHopBoost);
|
||||
+ controllableMinecartsBaseSpeed = getDouble("gameplay-mechanics.controllable-minecarts.base-speed", controllableMinecartsBaseSpeed);
|
||||
+ ConfigurationSection section = getConfigurationSection("gameplay-mechanics.controllable-minecarts.block-speed");
|
||||
+ if (section != null) {
|
||||
+ for (String key : section.getKeys(false)) {
|
||||
+ Block block = IRegistry.BLOCK.get(new MinecraftKey(key));
|
||||
+ if (block != null) {
|
||||
+ if (block != Blocks.AIR) {
|
||||
+ controllableMinecartsBlockSpeeds.put(block, section.getDouble(key, controllableMinecartsBaseSpeed));
|
||||
+ }
|
||||
+ }
|
||||
+ } else {
|
||||
+ set("gameplay-mechanics.controllable-minecarts.block-speed.grass-block", 0.3D);
|
||||
+ set("gameplay-mechanics.controllable-minecarts.block-speed.stone", 0.5D);
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
+
|
||||
public boolean batRidable = false;
|
||||
public boolean batRidableInWater = false;
|
||||
public boolean batRequireShiftToMount = true;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
From cee8d638411f39049d6764ee0de64eb8c852c496 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Fri, 5 Jul 2019 11:09:25 -0500
|
||||
Subject: [PATCH] Make illusioners naturally spawn
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/Biomes.java | 18 ++++++++++++++++++
|
||||
.../net/minecraft/server/SpawnerCreature.java | 4 ++++
|
||||
.../java/net/pl3x/purpur/PurpurConfig.java | 5 +++++
|
||||
3 files changed, 27 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Biomes.java b/src/main/java/net/minecraft/server/Biomes.java
|
||||
index d1f8695fee..27e82af009 100644
|
||||
--- a/src/main/java/net/minecraft/server/Biomes.java
|
||||
+++ b/src/main/java/net/minecraft/server/Biomes.java
|
||||
@@ -112,6 +112,24 @@ public abstract class Biomes {
|
||||
addSpawn("eroded_badlands", EnumCreatureType.MONSTER, EntityTypes.GIANT, 10, 1, 1);
|
||||
addSpawn("modified_badlands_plateau", EnumCreatureType.MONSTER, EntityTypes.GIANT, 10, 1, 1);
|
||||
}
|
||||
+ if (net.pl3x.purpur.PurpurConfig.illusionersNaturallySpawn) {
|
||||
+ addSpawn("plains", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ addSpawn("sunflower_plains", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ addSpawn("desert", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ addSpawn("desert_hills", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ addSpawn("desert_lakes", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ addSpawn("mountains", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ addSpawn("gravelly_mountains", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ addSpawn("modified_gravelly_mountains", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ addSpawn("savanna", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ addSpawn("savanna_plateau", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ addSpawn("shattered_savanna", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ addSpawn("shattered_savanna_plateau", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 5, 1, 1);
|
||||
+ addSpawn("badlands", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 10, 1, 1);
|
||||
+ addSpawn("badlands_plateau", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 10, 1, 1);
|
||||
+ addSpawn("eroded_badlands", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 10, 1, 1);
|
||||
+ addSpawn("modified_badlands_plateau", EnumCreatureType.MONSTER, EntityTypes.ILLUSIONER, 10, 1, 1);
|
||||
+ }
|
||||
}
|
||||
|
||||
private static void addSpawn(String biome, EnumCreatureType ct, EntityTypes et, int weight, int min_group, int max_group) {
|
||||
diff --git a/src/main/java/net/minecraft/server/SpawnerCreature.java b/src/main/java/net/minecraft/server/SpawnerCreature.java
|
||||
index 53d5900411..8576a7d97a 100644
|
||||
--- a/src/main/java/net/minecraft/server/SpawnerCreature.java
|
||||
+++ b/src/main/java/net/minecraft/server/SpawnerCreature.java
|
||||
@@ -82,6 +82,10 @@ public final class SpawnerCreature {
|
||||
if (!net.pl3x.purpur.PurpurConfig.giantsNaturallySpawn) {
|
||||
return i;
|
||||
}
|
||||
+ } else if (entitytypes == EntityTypes.ILLUSIONER) {
|
||||
+ if (!net.pl3x.purpur.PurpurConfig.illusionersNaturallySpawn) {
|
||||
+ return i;
|
||||
+ }
|
||||
}
|
||||
// Purpur end
|
||||
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index d6af361467..b14a4a57cc 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -158,6 +158,11 @@ public class PurpurConfig {
|
||||
giantsHaveAI = getBoolean("settings.mobs.giant.have-ai", giantsHaveAI);
|
||||
}
|
||||
|
||||
+ public static boolean illusionersNaturallySpawn = true;
|
||||
+ private static void illusionersSettings() {
|
||||
+ illusionersNaturallySpawn = getBoolean("settings.mobs.illusioner.naturally-spawn", illusionersNaturallySpawn);
|
||||
+ }
|
||||
+
|
||||
public static boolean ironGolemSwims = true;
|
||||
private static void ironGolemSettings() {
|
||||
ironGolemSwims = getBoolean("settings.mobs.iron_golem.swims", ironGolemSwims);
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,29 +1,29 @@
|
||||
From 47688a093b08a48bbfa21412812646fcd333f4dd Mon Sep 17 00:00:00 2001
|
||||
From 4bed950206f3e5b08010614e08bd576562b2e825 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Thu, 6 Jun 2019 17:40:30 -0500
|
||||
Subject: [PATCH] Allow color codes on signs
|
||||
Subject: [PATCH] Signs allow color codes
|
||||
|
||||
---
|
||||
.../java/net/minecraft/server/EntityPlayer.java | 1 +
|
||||
.../net/minecraft/server/PlayerConnection.java | 8 ++++++++
|
||||
.../java/net/minecraft/server/TileEntitySign.java | 14 ++++++++++++++
|
||||
.../java/net/pl3x/purpur/PurpurWorldConfig.java | 5 +++++
|
||||
4 files changed, 28 insertions(+)
|
||||
.../java/net/pl3x/purpur/PurpurWorldConfig.java | 2 ++
|
||||
4 files changed, 25 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
index 15230a834..5e56e0e3e 100644
|
||||
index 15230a834..415cdb1c3 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
@@ -1124,6 +1124,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
@Override
|
||||
public void openSign(TileEntitySign tileentitysign) {
|
||||
tileentitysign.a((EntityHuman) this);
|
||||
+ if (world.purpurConfig.allowSignColors) this.playerConnection.sendPacket(tileentitysign.getTranslatedUpdatePacket()); // Purpur
|
||||
+ if (world.purpurConfig.signAllowColors) this.playerConnection.sendPacket(tileentitysign.getTranslatedUpdatePacket()); // Purpur
|
||||
this.playerConnection.sendPacket(new PacketPlayOutOpenSignEditor(tileentitysign.getPosition()));
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index 108377d76..f7ee28913 100644
|
||||
index 108377d76..fee512a47 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -2576,6 +2576,14 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -31,7 +31,7 @@ index 108377d76..f7ee28913 100644
|
||||
}
|
||||
// Paper end
|
||||
+ // Purpur start
|
||||
+ if (worldserver.purpurConfig.allowSignColors) {
|
||||
+ if (worldserver.purpurConfig.signAllowColors) {
|
||||
+ lines[i] = astring[i];
|
||||
+ if (player.hasPermission("purpur.sign.color")) lines[i] = lines[i].replaceAll("(?i)&([0-9a-fr])", "\u00a7$1");
|
||||
+ if (player.hasPermission("purpur.sign.style")) lines[i] = lines[i].replaceAll("(?i)&([l-or])", "\u00a7$1");
|
||||
@@ -42,22 +42,22 @@ index 108377d76..f7ee28913 100644
|
||||
}
|
||||
SignChangeEvent event = new SignChangeEvent((org.bukkit.craftbukkit.block.CraftBlock) player.getWorld().getBlockAt(x, y, z), this.server.getPlayer(this.player), lines);
|
||||
diff --git a/src/main/java/net/minecraft/server/TileEntitySign.java b/src/main/java/net/minecraft/server/TileEntitySign.java
|
||||
index 5eb86c434..8810a1120 100644
|
||||
index 099d98e04..19d76c8cc 100644
|
||||
--- a/src/main/java/net/minecraft/server/TileEntitySign.java
|
||||
+++ b/src/main/java/net/minecraft/server/TileEntitySign.java
|
||||
@@ -119,6 +119,20 @@ public class TileEntitySign extends TileEntity implements ICommandListener { //
|
||||
@@ -89,6 +89,20 @@ public class TileEntitySign extends TileEntity implements ICommandListener { //
|
||||
this.g[i] = null;
|
||||
}
|
||||
|
||||
+ // Purpur start
|
||||
+ public PacketPlayOutTileEntityData getTranslatedUpdatePacket() {
|
||||
+ NBTTagCompound nbt = this.b();
|
||||
+ NBTTagCompound nbt = save(new NBTTagCompound());
|
||||
+ for (int i = 0; i < 4; ++i) {
|
||||
+ String line = lines[i].getLegacyString().replace("\u00a7", "&");
|
||||
+ if (line.endsWith("&r")) {
|
||||
+ line = line.substring(0, line.length() - 2);
|
||||
+ }
|
||||
+ nbt.setString("Text" + (i + 1), IChatBaseComponent.ChatSerializer.a(new ChatMessage(line)));
|
||||
+ nbt.setString("Text" + (i + 1), IChatBaseComponent.ChatSerializer.toJson(new ChatMessage(line)));
|
||||
+ }
|
||||
+ return new PacketPlayOutTileEntityData(position, 9, nbt);
|
||||
+ }
|
||||
@@ -67,19 +67,20 @@ index 5eb86c434..8810a1120 100644
|
||||
@Override
|
||||
public PacketPlayOutTileEntityData getUpdatePacket() {
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 6cb887ca8..061b02e45 100644
|
||||
index 7add97225..5faeb7757 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -95,4 +95,9 @@ public class PurpurWorldConfig {
|
||||
private void campfiresGoOutInRain() {
|
||||
campfiresGoOutInRain = getBoolean("campfires-go-out-in-rain", campfiresGoOutInRain);
|
||||
@@ -75,8 +75,10 @@ public class PurpurWorldConfig {
|
||||
farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow);
|
||||
}
|
||||
+
|
||||
+ public boolean allowSignColors = false;
|
||||
+ private void allowSignColors() {
|
||||
+ allowSignColors = getBoolean("allow-sign-colors", allowSignColors);
|
||||
+ }
|
||||
}
|
||||
|
||||
+ public boolean signAllowColors = false;
|
||||
public boolean signRightClickEdit = false;
|
||||
private void signSettings() {
|
||||
+ signAllowColors = getBoolean("blocks.sign.allow-colors", signAllowColors);
|
||||
signRightClickEdit = getBoolean("blocks.sign.right-click-edit", signRightClickEdit);
|
||||
}
|
||||
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,20 +1,34 @@
|
||||
From 476d9a9f88033cc88be192b638cc1cfa025ce90c Mon Sep 17 00:00:00 2001
|
||||
From d7824473dfa29224ca93f1b642bbe9f89f29dc41 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sun, 19 May 2019 18:11:53 -0500
|
||||
Subject: [PATCH] Add regen effect to campfires
|
||||
Subject: [PATCH] Campfires have regen effect
|
||||
|
||||
---
|
||||
.../net/minecraft/server/BlockCampfire.java | 2 +-
|
||||
.../net/minecraft/server/EntityLiving.java | 15 ++++++++--
|
||||
.../net/minecraft/server/EntityPotion.java | 26 ++++++++++++++++
|
||||
.../minecraft/server/TileEntityCampfire.java | 30 +++++++++++++++++++
|
||||
.../net/pl3x/purpur/PurpurWorldConfig.java | 23 ++++++++++++++
|
||||
4 files changed, 91 insertions(+), 3 deletions(-)
|
||||
5 files changed, 92 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockCampfire.java b/src/main/java/net/minecraft/server/BlockCampfire.java
|
||||
index 6303be944..65f8d803b 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockCampfire.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockCampfire.java
|
||||
@@ -8,7 +8,7 @@ public class BlockCampfire extends BlockTileEntity implements IBlockWaterlogged
|
||||
|
||||
protected static final VoxelShape a = Block.a(0.0D, 0.0D, 0.0D, 16.0D, 7.0D, 16.0D);
|
||||
public static final BlockStateBoolean b = BlockProperties.r;
|
||||
- public static final BlockStateBoolean c = BlockProperties.y;
|
||||
+ public static final BlockStateBoolean c = BlockProperties.y; public static BlockStateBoolean signalFire() { return c; } // Purpur - OBFHELPER
|
||||
public static final BlockStateBoolean d = BlockProperties.C;
|
||||
public static final BlockStateDirection e = BlockProperties.N;
|
||||
private static final VoxelShape f = Block.a(6.0D, 0.0D, 6.0D, 10.0D, 16.0D, 10.0D);
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index b28c0de9a..5af703bd1 100644
|
||||
index 6ca11091c..2128e968a 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -2781,10 +2781,19 @@ public abstract class EntityLiving extends Entity {
|
||||
@@ -2772,10 +2772,19 @@ public abstract class EntityLiving extends Entity {
|
||||
}
|
||||
|
||||
public boolean hasLineOfSight(Entity entity) {
|
||||
@@ -25,20 +39,20 @@ index b28c0de9a..5af703bd1 100644
|
||||
+ }
|
||||
+
|
||||
+ public boolean hasLineOfSight(TileEntity te) {
|
||||
+ return hasLineOfSight(te.position.x + 0.5, te.position.y + 0.5, te.position.z + 0.5);
|
||||
+ return hasLineOfSight(te.position.getX() + 0.5, te.position.getY() + 0.5, te.position.getZ() + 0.5);
|
||||
+ }
|
||||
|
||||
- return this.world.rayTrace(new RayTrace(vec3d, vec3d1, RayTrace.BlockCollisionOption.COLLIDER, RayTrace.FluidCollisionOption.NONE, this)).getType() == MovingObjectPosition.EnumMovingObjectType.MISS;
|
||||
+ public boolean hasLineOfSight(double x, double y, double z) {
|
||||
+ Vec3D start = new Vec3D(locX(), getHeadY(), locZ());
|
||||
+ Vec3D end = new Vec3D(x, y, z);
|
||||
+ return this.world.rayTrace(new RayTrace(start, end, RayTrace.BlockCollisionOption.COLLIDER, RayTrace.FluidCollisionOption.NONE, this)).getType() == MovingObjectPosition.EnumMovingObjectType.MISS;
|
||||
+ return world.rayTrace(new RayTrace(start, end, RayTrace.BlockCollisionOption.COLLIDER, RayTrace.FluidCollisionOption.NONE, this)).getType() == MovingObjectPosition.EnumMovingObjectType.MISS;
|
||||
+ // Purpur end
|
||||
}
|
||||
|
||||
@Override
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityPotion.java b/src/main/java/net/minecraft/server/EntityPotion.java
|
||||
index 2f9a73ea3..9c9131d8d 100644
|
||||
index 2f9a73ea3..2398499bc 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityPotion.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityPotion.java
|
||||
@@ -91,6 +91,7 @@ public class EntityPotion extends EntityProjectile {
|
||||
@@ -65,7 +79,7 @@ index 2f9a73ea3..9c9131d8d 100644
|
||||
+ for (MobEffect effect : list) {
|
||||
+ if (effect.getMobEffect() == MobEffects.REGENERATION) {
|
||||
+ for (int i = 0; i < 6 ; i++) {
|
||||
+ ((WorldServer) world).sendParticles(((WorldServer) world).players, null, Particles.HEART, te.position.x, te.position.y + 1, te.position.z, 1, 0.5, 0.5, 0.5, 0, true);
|
||||
+ ((WorldServer) world).sendParticles(((WorldServer) world).players, null, Particles.HEART, te.position.getX(), te.position.getY() + 1, te.position.getZ(), 1, 0.5, 0.5, 0.5, 0, true);
|
||||
+ }
|
||||
+ ((TileEntityCampfire) te).splashed = true;
|
||||
+ break;
|
||||
@@ -82,7 +96,7 @@ index 2f9a73ea3..9c9131d8d 100644
|
||||
AxisAlignedBB axisalignedbb = this.getBoundingBox().grow(4.0D, 2.0D, 4.0D);
|
||||
List<EntityLiving> list = this.world.a(EntityLiving.class, axisalignedbb, EntityPotion.e);
|
||||
diff --git a/src/main/java/net/minecraft/server/TileEntityCampfire.java b/src/main/java/net/minecraft/server/TileEntityCampfire.java
|
||||
index a1580b8c6..3a44454ed 100644
|
||||
index a1580b8c6..618ca2d76 100644
|
||||
--- a/src/main/java/net/minecraft/server/TileEntityCampfire.java
|
||||
+++ b/src/main/java/net/minecraft/server/TileEntityCampfire.java
|
||||
@@ -14,6 +14,7 @@ public class TileEntityCampfire extends TileEntity implements Clearable, ITickab
|
||||
@@ -99,12 +113,12 @@ index a1580b8c6..3a44454ed 100644
|
||||
if (flag) {
|
||||
+ // Purpur start
|
||||
+ if ((splashed || !world.purpurConfig.campfireRequireRegenPotion) && world.purpurConfig.campfireRegenInterval > 0 && world.getTime() % world.purpurConfig.campfireRegenInterval == 0L) {
|
||||
+ boolean signalBoost = getBlock().get(BlockCampfire.c);
|
||||
+ boolean signalBoost = getBlock().get(BlockCampfire.signalFire());
|
||||
+ int duration = signalBoost ? world.purpurConfig.campfireRegenBoostDuration : world.purpurConfig.campfireRegenDuration;
|
||||
+ byte amp = (byte) (signalBoost ? world.purpurConfig.campfireRegenBoostAmp : world.purpurConfig.campfireRegenAmp);
|
||||
+ int range = signalBoost ? world.purpurConfig.campfireRegenBoostRange : world.purpurConfig.campfireRegenRange;
|
||||
+ MobEffect regeneration = new MobEffect(MobEffects.REGENERATION, duration, amp, true, true);
|
||||
+ world.a(EntityHuman.class, new AxisAlignedBB(position).g(range)).forEach(entityhuman -> {
|
||||
+ world.getEntitiesByClass(EntityHuman.class, new AxisAlignedBB(position).grow(range)).forEach(entityhuman -> {
|
||||
+ boolean noLineOfSign = true;
|
||||
+ if (!signalBoost && world.purpurConfig.campfireRegenRequireLineOfSight) {
|
||||
+ noLineOfSign = false;
|
||||
@@ -151,37 +165,39 @@ index a1580b8c6..3a44454ed 100644
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 4985f2173..f4811a1d7 100644
|
||||
index 5faeb7757..05c615bc7 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -57,4 +57,27 @@ public class PurpurWorldConfig {
|
||||
PurpurConfig.config.addDefault("world-settings.default." + path, def);
|
||||
@@ -70,6 +70,29 @@ public class PurpurWorldConfig {
|
||||
return PurpurConfig.config.getString("world-settings." + worldName + "." + path, PurpurConfig.config.getString("world-settings.default." + path));
|
||||
}
|
||||
+
|
||||
+ public int campfireRegenInterval = 40;
|
||||
|
||||
+ public int campfireRegenInterval = 0;
|
||||
+ public int campfireRegenDuration = 80;
|
||||
+ public int campfireRegenRange = 5;
|
||||
+ public int campfireRegenAmp = 0;
|
||||
+ public boolean campfireRegenRequireLineOfSight = true;
|
||||
+ public int campfireRegenBoostDuration = 80;
|
||||
+ public int campfireRegenBoostDuration = 0;
|
||||
+ public int campfireRegenBoostRange = 10;
|
||||
+ public int campfireRegenBoostAmp = 1;
|
||||
+ public boolean campfireRegenBoostRequireLineOfSight = false;
|
||||
+ public boolean campfireRequireRegenPotion = true;
|
||||
+ private void campfireRegenSettings() {
|
||||
+ campfireRegenInterval = getInt("campfire-regen.interval", campfireRegenInterval);
|
||||
+ campfireRegenDuration = getInt("campfire-regen.duration", campfireRegenDuration);
|
||||
+ campfireRegenRange = getInt("campfire-regen.range", campfireRegenRange);
|
||||
+ campfireRegenAmp = getInt("campfire-regen.amplifier", campfireRegenAmp);
|
||||
+ campfireRegenRequireLineOfSight = getBoolean("campfire-regen.require-line-of-sight", campfireRegenRequireLineOfSight);
|
||||
+ campfireRegenBoostDuration = getInt("campfire-regen.boost-duration", campfireRegenBoostDuration);
|
||||
+ campfireRegenBoostRange = getInt("campfire-regen.boost-range", campfireRegenBoostRange);
|
||||
+ campfireRegenBoostAmp = getInt("campfire-regen.boost-amplifier", campfireRegenBoostAmp);
|
||||
+ campfireRegenBoostRequireLineOfSight = getBoolean("campfire-regen.boost-require-line-of-sight", campfireRegenBoostRequireLineOfSight);
|
||||
+ campfireRequireRegenPotion = getBoolean("campfire-regen.requires-regen-potion-to-activate", campfireRequireRegenPotion);
|
||||
+ private void campfireSettings() {
|
||||
+ campfireRegenInterval = getInt("blocks.campfire.regen.interval", campfireRegenInterval);
|
||||
+ campfireRegenDuration = getInt("blocks.campfire.regen.duration", campfireRegenDuration);
|
||||
+ campfireRegenRange = getInt("blocks.campfire.regen.range", campfireRegenRange);
|
||||
+ campfireRegenAmp = getInt("blocks.campfire.regen.amplifier", campfireRegenAmp);
|
||||
+ campfireRegenRequireLineOfSight = getBoolean("blocks.campfire.regen.require-line-of-sight", campfireRegenRequireLineOfSight);
|
||||
+ campfireRegenBoostDuration = getInt("blocks.campfire.regen.boost-duration", campfireRegenBoostDuration);
|
||||
+ campfireRegenBoostRange = getInt("blocks.campfire.regen.boost-range", campfireRegenBoostRange);
|
||||
+ campfireRegenBoostAmp = getInt("blocks.campfire.regen.boost-amplifier", campfireRegenBoostAmp);
|
||||
+ campfireRegenBoostRequireLineOfSight = getBoolean("blocks.campfire.regen.boost-require-line-of-sight", campfireRegenBoostRequireLineOfSight);
|
||||
+ campfireRequireRegenPotion = getBoolean("blocks.campfire.regen.requires-potion-to-activate", campfireRequireRegenPotion);
|
||||
+ }
|
||||
}
|
||||
+
|
||||
public boolean farmlandGetsMoistFromBelow = false;
|
||||
private void farmlandSettings() {
|
||||
farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow);
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
From e5c6caea930d47af87afbcd73f7150f6672b7a03 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Wed, 3 Jul 2019 23:58:31 -0500
|
||||
Subject: [PATCH] Disable loot drops on death by cramming
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityLiving.java | 2 ++
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 2 ++
|
||||
2 files changed, 4 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index 2128e968a..76a925f7a 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -1374,8 +1374,10 @@ public abstract class EntityLiving extends Entity {
|
||||
this.dropInventory(); // CraftBukkit - from below
|
||||
org.bukkit.event.entity.EntityDeathEvent deathEvent; // Paper
|
||||
if (this.isDropExperience() && this.world.getGameRules().getBoolean(GameRules.DO_MOB_LOOT)) {
|
||||
+ if (!(damagesource == DamageSource.CRAMMING && world.purpurConfig.disableDropsOnCrammingDeath)) { // Purpur
|
||||
this.a(damagesource, flag);
|
||||
this.dropDeathLoot(damagesource, i, flag);
|
||||
+ } // Purpur
|
||||
// CraftBukkit start - Call death event
|
||||
deathEvent = CraftEventFactory.callEntityDeathEvent(this, this.drops); // Paper
|
||||
} else {
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 05c615bc7..1941339d9 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -120,6 +120,7 @@ public class PurpurWorldConfig {
|
||||
public double controllableMinecartsHopBoost = 0.5D;
|
||||
public double controllableMinecartsBaseSpeed = 0.1D;
|
||||
public Map<Block, Double> controllableMinecartsBlockSpeeds = new HashMap<>();
|
||||
+ public boolean disableDropsOnCrammingDeath = false;
|
||||
private void gameplayMechanicsSettings() {
|
||||
controllableMinecarts = getBoolean("gameplay-mechanics.controllable-minecarts.enabled", controllableMinecarts);
|
||||
controllableMinecartsPlaceAnywhere = getBoolean("gameplay-mechanics.controllable-minecarts.place-anywhere", controllableMinecartsPlaceAnywhere);
|
||||
@@ -138,6 +139,7 @@ public class PurpurWorldConfig {
|
||||
set("gameplay-mechanics.controllable-minecarts.block-speed.grass-block", 0.3D);
|
||||
set("gameplay-mechanics.controllable-minecarts.block-speed.stone", 0.5D);
|
||||
}
|
||||
+ disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath);
|
||||
}
|
||||
|
||||
public boolean batRidable = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
82
patches/server/0033-Campfires-burn-out-in-rain.patch
Normal file
82
patches/server/0033-Campfires-burn-out-in-rain.patch
Normal file
@@ -0,0 +1,82 @@
|
||||
From 612b855163ca33e13f5b717fc4b9fdd6c633287b Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Thu, 6 Jun 2019 21:30:49 -0500
|
||||
Subject: [PATCH] Campfires burn out in rain
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/Block.java | 2 +-
|
||||
.../net/minecraft/server/BlockCampfire.java | 17 ++++++++++++++++-
|
||||
.../java/net/pl3x/purpur/PurpurWorldConfig.java | 2 ++
|
||||
3 files changed, 19 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Block.java b/src/main/java/net/minecraft/server/Block.java
|
||||
index b29ed1cfa..d7911c342 100644
|
||||
--- a/src/main/java/net/minecraft/server/Block.java
|
||||
+++ b/src/main/java/net/minecraft/server/Block.java
|
||||
@@ -387,7 +387,7 @@ public class Block implements IMaterial {
|
||||
PacketDebug.a(world, blockposition);
|
||||
}
|
||||
|
||||
- public int a(IWorldReader iworldreader) {
|
||||
+ public int a(IWorldReader world) { return tickRate(world); } public int tickRate(IWorldReader world) { // Purpur - OBFHELPER
|
||||
return 10;
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockCampfire.java b/src/main/java/net/minecraft/server/BlockCampfire.java
|
||||
index 65f8d803b..3b95dfaaa 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockCampfire.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockCampfire.java
|
||||
@@ -7,7 +7,7 @@ import javax.annotation.Nullable;
|
||||
public class BlockCampfire extends BlockTileEntity implements IBlockWaterlogged {
|
||||
|
||||
protected static final VoxelShape a = Block.a(0.0D, 0.0D, 0.0D, 16.0D, 7.0D, 16.0D);
|
||||
- public static final BlockStateBoolean b = BlockProperties.r;
|
||||
+ public static final BlockStateBoolean b = BlockProperties.r; public static BlockStateBoolean lit() { return b; } // Purpur - OBFHELPER
|
||||
public static final BlockStateBoolean c = BlockProperties.y; public static BlockStateBoolean signalFire() { return c; } // Purpur - OBFHELPER
|
||||
public static final BlockStateBoolean d = BlockProperties.C;
|
||||
public static final BlockStateDirection e = BlockProperties.N;
|
||||
@@ -74,6 +74,21 @@ public class BlockCampfire extends BlockTileEntity implements IBlockWaterlogged
|
||||
return (IBlockData) ((IBlockData) ((IBlockData) ((IBlockData) this.getBlockData().set(BlockCampfire.d, flag)).set(BlockCampfire.c, this.h(world.getType(blockposition.down())))).set(BlockCampfire.b, !flag)).set(BlockCampfire.e, blockactioncontext.f());
|
||||
}
|
||||
|
||||
+ // Purpur start
|
||||
+ @Override
|
||||
+ public void tick(IBlockData iblockdata, WorldServer world, BlockPosition pos, Random random) {
|
||||
+ if (world.purpurConfig.campfireBurnOutInRain && world.getTime() % 20 == 0L && iblockdata.get(lit()) && world.isRainingAt(pos.shift(EnumDirection.UP))) {
|
||||
+ world.setTypeAndData(pos, iblockdata.set(lit(), false), 3);
|
||||
+ }
|
||||
+ world.getBlockTickList().a(pos, this, tickRate(world));
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public int tickRate(IWorldReader world) {
|
||||
+ return 1;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
@Override
|
||||
public IBlockData updateState(IBlockData iblockdata, EnumDirection enumdirection, IBlockData iblockdata1, GeneratorAccess generatoraccess, BlockPosition blockposition, BlockPosition blockposition1) {
|
||||
if ((Boolean) iblockdata.get(BlockCampfire.d)) {
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 1941339d9..9472d66ae 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -80,6 +80,7 @@ public class PurpurWorldConfig {
|
||||
public int campfireRegenBoostAmp = 1;
|
||||
public boolean campfireRegenBoostRequireLineOfSight = false;
|
||||
public boolean campfireRequireRegenPotion = true;
|
||||
+ public boolean campfireBurnOutInRain = false;
|
||||
private void campfireSettings() {
|
||||
campfireRegenInterval = getInt("blocks.campfire.regen.interval", campfireRegenInterval);
|
||||
campfireRegenDuration = getInt("blocks.campfire.regen.duration", campfireRegenDuration);
|
||||
@@ -91,6 +92,7 @@ public class PurpurWorldConfig {
|
||||
campfireRegenBoostAmp = getInt("blocks.campfire.regen.boost-amplifier", campfireRegenBoostAmp);
|
||||
campfireRegenBoostRequireLineOfSight = getBoolean("blocks.campfire.regen.boost-require-line-of-sight", campfireRegenBoostRequireLineOfSight);
|
||||
campfireRequireRegenPotion = getBoolean("blocks.campfire.regen.requires-potion-to-activate", campfireRequireRegenPotion);
|
||||
+ campfireBurnOutInRain = getBoolean("blocks.campfire.burn-out-in-rain", campfireBurnOutInRain);
|
||||
}
|
||||
|
||||
public boolean farmlandGetsMoistFromBelow = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
83
patches/server/0034-Campfires-should-fall-with-gravity.patch
Normal file
83
patches/server/0034-Campfires-should-fall-with-gravity.patch
Normal file
@@ -0,0 +1,83 @@
|
||||
From 65db3f148c97525d427513cc6e89b21cb378965d Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Thu, 23 May 2019 16:20:21 -0500
|
||||
Subject: [PATCH] Campfires should fall with gravity
|
||||
|
||||
---
|
||||
.../java/net/minecraft/server/BlockCampfire.java | 16 ++++++++++++++--
|
||||
.../java/net/pl3x/purpur/PurpurWorldConfig.java | 2 ++
|
||||
2 files changed, 16 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockCampfire.java b/src/main/java/net/minecraft/server/BlockCampfire.java
|
||||
index 3b95dfaaa..418fa6d1f 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockCampfire.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockCampfire.java
|
||||
@@ -9,7 +9,7 @@ public class BlockCampfire extends BlockTileEntity implements IBlockWaterlogged
|
||||
protected static final VoxelShape a = Block.a(0.0D, 0.0D, 0.0D, 16.0D, 7.0D, 16.0D);
|
||||
public static final BlockStateBoolean b = BlockProperties.r; public static BlockStateBoolean lit() { return b; } // Purpur - OBFHELPER
|
||||
public static final BlockStateBoolean c = BlockProperties.y; public static BlockStateBoolean signalFire() { return c; } // Purpur - OBFHELPER
|
||||
- public static final BlockStateBoolean d = BlockProperties.C;
|
||||
+ public static final BlockStateBoolean d = BlockProperties.C; public static BlockStateBoolean waterlogged() { return d; } // Purpur - OBFHELPER
|
||||
public static final BlockStateDirection e = BlockProperties.N;
|
||||
private static final VoxelShape f = Block.a(6.0D, 0.0D, 6.0D, 10.0D, 16.0D, 10.0D);
|
||||
|
||||
@@ -75,8 +75,19 @@ public class BlockCampfire extends BlockTileEntity implements IBlockWaterlogged
|
||||
}
|
||||
|
||||
// Purpur start
|
||||
+ @Override
|
||||
+ public void onPlace(IBlockData iblockdata, World world, BlockPosition pos, IBlockData iblockdata1, boolean flag) {
|
||||
+ world.getBlockTickList().a(pos, this, tickRate(world));
|
||||
+ }
|
||||
+
|
||||
@Override
|
||||
public void tick(IBlockData iblockdata, WorldServer world, BlockPosition pos, Random random) {
|
||||
+ if (world.purpurConfig.campfireFallWithGravity && BlockFalling.canFallThrough(world.getType(pos.down())) && pos.getY() >= 0) {
|
||||
+ world.addEntity(new EntityFallingBlock(world, pos.getX() + 0.5D, pos.getY(), pos.getZ() + 0.5D, world.getType(pos)));
|
||||
+ }
|
||||
+ if (iblockdata.get(waterlogged()) && iblockdata.get(lit())) {
|
||||
+ world.setTypeAndData(pos, iblockdata.set(lit(), false), 3);
|
||||
+ }
|
||||
if (world.purpurConfig.campfireBurnOutInRain && world.getTime() % 20 == 0L && iblockdata.get(lit()) && world.isRainingAt(pos.shift(EnumDirection.UP))) {
|
||||
world.setTypeAndData(pos, iblockdata.set(lit(), false), 3);
|
||||
}
|
||||
@@ -91,6 +102,7 @@ public class BlockCampfire extends BlockTileEntity implements IBlockWaterlogged
|
||||
|
||||
@Override
|
||||
public IBlockData updateState(IBlockData iblockdata, EnumDirection enumdirection, IBlockData iblockdata1, GeneratorAccess generatoraccess, BlockPosition blockposition, BlockPosition blockposition1) {
|
||||
+ generatoraccess.getBlockTickList().a(blockposition, this, tickRate(generatoraccess)); // Purpur - Campfires should fall with gravity
|
||||
if ((Boolean) iblockdata.get(BlockCampfire.d)) {
|
||||
generatoraccess.getFluidTickList().a(blockposition, FluidTypes.WATER, FluidTypes.WATER.a((IWorldReader) generatoraccess));
|
||||
}
|
||||
@@ -119,7 +131,7 @@ public class BlockCampfire extends BlockTileEntity implements IBlockWaterlogged
|
||||
|
||||
@Override
|
||||
public boolean place(GeneratorAccess generatoraccess, BlockPosition blockposition, IBlockData iblockdata, Fluid fluid) {
|
||||
- if (!(Boolean) iblockdata.get(BlockProperties.C) && fluid.getType() == FluidTypes.WATER) {
|
||||
+ if (!(Boolean) iblockdata.get(BlockCampfire.d) && fluid.getType() == FluidTypes.WATER) { // Purpur
|
||||
boolean flag = (Boolean) iblockdata.get(BlockCampfire.b);
|
||||
|
||||
if (flag) {
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 9472d66ae..be2f6bac1 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -81,6 +81,7 @@ public class PurpurWorldConfig {
|
||||
public boolean campfireRegenBoostRequireLineOfSight = false;
|
||||
public boolean campfireRequireRegenPotion = true;
|
||||
public boolean campfireBurnOutInRain = false;
|
||||
+ public boolean campfireFallWithGravity = false;
|
||||
private void campfireSettings() {
|
||||
campfireRegenInterval = getInt("blocks.campfire.regen.interval", campfireRegenInterval);
|
||||
campfireRegenDuration = getInt("blocks.campfire.regen.duration", campfireRegenDuration);
|
||||
@@ -93,6 +94,7 @@ public class PurpurWorldConfig {
|
||||
campfireRegenBoostRequireLineOfSight = getBoolean("blocks.campfire.regen.boost-require-line-of-sight", campfireRegenBoostRequireLineOfSight);
|
||||
campfireRequireRegenPotion = getBoolean("blocks.campfire.regen.requires-potion-to-activate", campfireRequireRegenPotion);
|
||||
campfireBurnOutInRain = getBoolean("blocks.campfire.burn-out-in-rain", campfireBurnOutInRain);
|
||||
+ campfireFallWithGravity = getBoolean("blocks.campfire.fall-with-gravity", campfireFallWithGravity);
|
||||
}
|
||||
|
||||
public boolean farmlandGetsMoistFromBelow = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From f22ff4979a67ab0064e528c5b068e09e72cf00dc Mon Sep 17 00:00:00 2001
|
||||
From 14c50671c727d7922acaa1a5ea398972feb49cc9 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 6 Jul 2019 17:00:04 -0500
|
||||
Subject: [PATCH] Dont send useless entity packets
|
||||
@@ -10,7 +10,7 @@ Subject: [PATCH] Dont send useless entity packets
|
||||
3 files changed, 27 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
|
||||
index 3a88c9a670..1f7c8f7da0 100644
|
||||
index 3a88c9a67..1f7c8f7da 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
|
||||
@@ -162,6 +162,7 @@ public class EntityTrackerEntry {
|
||||
@@ -45,7 +45,7 @@ index 3a88c9a670..1f7c8f7da0 100644
|
||||
this.tracker.c(entityplayer);
|
||||
entityplayer.c(this.tracker);
|
||||
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntity.java b/src/main/java/net/minecraft/server/PacketPlayOutEntity.java
|
||||
index e5da2b19c1..5b1d959354 100644
|
||||
index e5da2b19c..5b1d95935 100644
|
||||
--- a/src/main/java/net/minecraft/server/PacketPlayOutEntity.java
|
||||
+++ b/src/main/java/net/minecraft/server/PacketPlayOutEntity.java
|
||||
@@ -5,11 +5,11 @@ import java.io.IOException;
|
||||
@@ -66,21 +66,19 @@ index e5da2b19c1..5b1d959354 100644
|
||||
protected boolean h;
|
||||
protected boolean i;
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index aa68cc366d..5ce6afde79 100644
|
||||
index 15458be9d..9b2ec85b1 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -141,6 +141,11 @@ public class PurpurConfig {
|
||||
disableDropsOnCrammingDeath = getBoolean("settings.disable-drops-on-cramming-death", disableDropsOnCrammingDeath);
|
||||
@@ -139,4 +139,9 @@ public class PurpurConfig {
|
||||
loggerSuppressInitLegacyMaterialError = getBoolean("settings.logger.suppress-init-legacy-material-errors", loggerSuppressInitLegacyMaterialError);
|
||||
loggerSuppressWorldGenFeatureDeserializationError = getBoolean("settings.logger.suppress-world-gen-feature-deserialization-errors", loggerSuppressWorldGenFeatureDeserializationError);
|
||||
}
|
||||
|
||||
+
|
||||
+ public static boolean dontSendUselessEntityPackets = false;
|
||||
+ private static void dontSendUselessEntityPackets() {
|
||||
+ dontSendUselessEntityPackets = getBoolean("settings.dont-send-useless-entity-packets", dontSendUselessEntityPackets);
|
||||
+ }
|
||||
+
|
||||
public static boolean requireShiftToMount = true;
|
||||
private static void requireShiftToMount() {
|
||||
requireShiftToMount = getBoolean("settings.mobs.require-shift-to-mount", requireShiftToMount);
|
||||
}
|
||||
--
|
||||
2.24.0.rc1
|
||||
2.24.0
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
From 25737109224f0f03d2b5b05312c0a31b3952c424 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Tue, 9 Jul 2019 20:56:47 -0500
|
||||
Subject: [PATCH] Fix pig zombies (MC-56653)
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityPigZombie.java | 9 ++++++++-
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 5 +++++
|
||||
2 files changed, 13 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityPigZombie.java b/src/main/java/net/minecraft/server/EntityPigZombie.java
|
||||
index 3321e2257..9938e8a5f 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityPigZombie.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityPigZombie.java
|
||||
@@ -140,6 +140,7 @@ public class EntityPigZombie extends EntityZombie {
|
||||
boolean result = super.damageEntity(damagesource, f);
|
||||
|
||||
if (result && entity instanceof EntityHuman && !((EntityHuman) entity).isCreative() && this.hasLineOfSight(entity)) {
|
||||
+ if (world.purpurConfig.pigmenDontTargetUnlessHit) this.setLastDamager((EntityHuman) entity); // Purpur - fix MC-56653
|
||||
this.i((EntityLiving) entity);
|
||||
}
|
||||
|
||||
@@ -158,7 +159,7 @@ public class EntityPigZombie extends EntityZombie {
|
||||
this.angerLevel = event.getNewAnger();
|
||||
// CraftBukkit end
|
||||
this.soundDelay = this.random.nextInt(40);
|
||||
- this.setLastDamager(entityliving);
|
||||
+ if (!world.purpurConfig.pigmenDontTargetUnlessHit) this.setLastDamager(entityliving); // Purpur - fix MC-56653
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -205,6 +206,12 @@ public class EntityPigZombie extends EntityZombie {
|
||||
return this.eA();
|
||||
}
|
||||
|
||||
+ // Purpur start - fix MC-56653
|
||||
+ protected boolean isDropExperience() {
|
||||
+ return super.isDropExperience() && (!world.purpurConfig.pigmenDontTargetUnlessHit || getLastDamager() instanceof EntityHuman);
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
static class PathfinderGoalAnger extends PathfinderGoalNearestAttackableTarget<EntityHuman> {
|
||||
|
||||
public PathfinderGoalAnger(EntityPigZombie entitypigzombie) {
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 64128359c..f8755060f 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -116,6 +116,11 @@ public class PurpurWorldConfig {
|
||||
enderDragonAlwaysDropsEggBlock = getBoolean("mobs.ender-dragon.always-drop-egg-block", enderDragonAlwaysDropsEggBlock);
|
||||
}
|
||||
|
||||
+ public boolean pigmenDontTargetUnlessHit = false;
|
||||
+ private void pigmenSettings() {
|
||||
+ pigmenDontTargetUnlessHit = getBoolean("mobs.pigmen.dont-target-unless-hit", pigmenDontTargetUnlessHit);
|
||||
+ }
|
||||
+
|
||||
public float zombieHorseSpawnChance = 0F;
|
||||
private void zombieHorseSettings() {
|
||||
zombieHorseSpawnChance = (float) getDouble("mobs.zombie_horse.spawn-chance", zombieHorseSpawnChance);
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From 50fdf55beec37563faed1fa6dc40fa2ccece22c5 Mon Sep 17 00:00:00 2001
|
||||
From 2f83256859aecf5a51cfc362b12e672aa18c12ca Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 6 Jul 2019 21:12:58 -0500
|
||||
Subject: [PATCH] Fix item position desync (MC-4)
|
||||
@@ -6,11 +6,11 @@ Subject: [PATCH] Fix item position desync (MC-4)
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityTrackerEntry.java | 6 ++++++
|
||||
src/main/java/net/minecraft/server/PacketPlayOutEntity.java | 2 ++
|
||||
src/main/java/net/pl3x/purpur/PurpurConfig.java | 5 +++++
|
||||
3 files changed, 13 insertions(+)
|
||||
src/main/java/net/pl3x/purpur/PurpurConfig.java | 2 ++
|
||||
3 files changed, 10 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
|
||||
index 1f7c8f7da0..5dd4d392a6 100644
|
||||
index 1f7c8f7da..5dd4d392a 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
|
||||
@@ -124,6 +124,12 @@ public class EntityTrackerEntry {
|
||||
@@ -27,7 +27,7 @@ index 1f7c8f7da0..5dd4d392a6 100644
|
||||
boolean flag1 = vec3d.g() >= 7.62939453125E-6D;
|
||||
Packet<?> packet1 = null;
|
||||
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntity.java b/src/main/java/net/minecraft/server/PacketPlayOutEntity.java
|
||||
index 5b1d959354..0010448e3a 100644
|
||||
index 5b1d95935..0010448e3 100644
|
||||
--- a/src/main/java/net/minecraft/server/PacketPlayOutEntity.java
|
||||
+++ b/src/main/java/net/minecraft/server/PacketPlayOutEntity.java
|
||||
@@ -14,10 +14,12 @@ public class PacketPlayOutEntity implements Packet<PacketListenerPlayOut> {
|
||||
@@ -44,21 +44,19 @@ index 5b1d959354..0010448e3a 100644
|
||||
return (new Vec3D((double) i, (double) j, (double) k)).a(2.44140625E-4D);
|
||||
}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index 5ce6afde79..882f7711c7 100644
|
||||
index 9b2ec85b1..3f9913582 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -146,6 +146,11 @@ public class PurpurConfig {
|
||||
dontSendUselessEntityPackets = getBoolean("settings.dont-send-useless-entity-packets", dontSendUselessEntityPackets);
|
||||
@@ -141,7 +141,9 @@ public class PurpurConfig {
|
||||
}
|
||||
|
||||
public static boolean dontSendUselessEntityPackets = false;
|
||||
+ public static boolean fixItemPositionDesync = false;
|
||||
+ private static void fixItemPositionDesync() {
|
||||
private static void dontSendUselessEntityPackets() {
|
||||
dontSendUselessEntityPackets = getBoolean("settings.dont-send-useless-entity-packets", dontSendUselessEntityPackets);
|
||||
+ fixItemPositionDesync = getBoolean("settings.fix-item-position-desync", fixItemPositionDesync);
|
||||
+ }
|
||||
+
|
||||
public static boolean requireShiftToMount = true;
|
||||
private static void requireShiftToMount() {
|
||||
requireShiftToMount = getBoolean("settings.mobs.require-shift-to-mount", requireShiftToMount);
|
||||
}
|
||||
}
|
||||
--
|
||||
2.24.0.rc1
|
||||
2.24.0
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
From 7f41b1ff626fe428ddef47f024791aa18cef65dd Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Wed, 10 Jul 2019 20:43:05 -0500
|
||||
Subject: [PATCH] Option to toggle milk curing bad omen
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/ItemMilkBucket.java | 2 ++
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 5 +++++
|
||||
2 files changed, 7 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ItemMilkBucket.java b/src/main/java/net/minecraft/server/ItemMilkBucket.java
|
||||
index b7dd5e3c07..93131de75c 100644
|
||||
--- a/src/main/java/net/minecraft/server/ItemMilkBucket.java
|
||||
+++ b/src/main/java/net/minecraft/server/ItemMilkBucket.java
|
||||
@@ -20,7 +20,9 @@ public class ItemMilkBucket extends Item {
|
||||
}
|
||||
|
||||
if (!world.isClientSide) {
|
||||
+ MobEffect badOmen = entityliving.getEffect(MobEffects.BAD_OMEN); // Purpur
|
||||
entityliving.removeAllEffects(org.bukkit.event.entity.EntityPotionEffectEvent.Cause.MILK); // CraftBukkit
|
||||
+ if (!world.purpurConfig.milkCuresBadOmen && badOmen != null) entityliving.addEffect(badOmen); // Purpur
|
||||
}
|
||||
|
||||
return itemstack.isEmpty() ? new ItemStack(Items.BUCKET) : itemstack;
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index f8755060f1..81ece70d38 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -111,6 +111,11 @@ public class PurpurWorldConfig {
|
||||
itemsCanBreakTurtleEggs = getBoolean("items-can-break-turtle-eggs", itemsCanBreakTurtleEggs);
|
||||
}
|
||||
|
||||
+ public boolean milkCuresBadOmen = false;
|
||||
+ private void milkCuresBadOmen() {
|
||||
+ milkCuresBadOmen = getBoolean("milk-cures-bad-omen", milkCuresBadOmen);
|
||||
+ }
|
||||
+
|
||||
public boolean enderDragonAlwaysDropsEggBlock = false;
|
||||
private void enderDragonSettings() {
|
||||
enderDragonAlwaysDropsEggBlock = getBoolean("mobs.ender-dragon.always-drop-egg-block", enderDragonAlwaysDropsEggBlock);
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,52 +1,139 @@
|
||||
From e800b70ec7a2080ccc46d4231bc22743d9ee871f Mon Sep 17 00:00:00 2001
|
||||
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
||||
Date: Mon, 11 Mar 2019 12:18:29 -0700
|
||||
Subject: [PATCH] Rate limit packets incoming from players
|
||||
From fa88fe64b87377035d3f7376e69e39514b8f55e0 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
||||
Date: Fri, 7 Feb 2020 09:45:09 -0600
|
||||
Subject: [PATCH] Rate limit incoming packets from players
|
||||
|
||||
---
|
||||
.../com/destroystokyo/paper/PaperConfig.java | 12 ++
|
||||
.../paper/network/PacketLimiter.java | 135 ++++++++++++++++++
|
||||
.../net/minecraft/server/NetworkManager.java | 7 +
|
||||
.../minecraft/server/PlayerConnection.java | 54 +++++++
|
||||
4 files changed, 208 insertions(+)
|
||||
create mode 100644 src/main/java/com/destroystokyo/paper/network/PacketLimiter.java
|
||||
.../minecraft/server/PlayerConnection.java | 56 +++++++
|
||||
.../java/net/pl3x/purpur/PurpurConfig.java | 12 ++
|
||||
.../pl3x/purpur/network/PacketLimiter.java | 147 ++++++++++++++++++
|
||||
4 files changed, 222 insertions(+)
|
||||
create mode 100644 src/main/java/net/pl3x/purpur/network/PacketLimiter.java
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
||||
index d886f1d145..a60b825a0a 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
||||
@@ -368,6 +368,18 @@ public class PaperConfig {
|
||||
maxBookTotalSizeMultiplier = getDouble("settings.book-size.total-multiplier", maxBookTotalSizeMultiplier);
|
||||
diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java
|
||||
index 96a785af2..803ede8e3 100644
|
||||
--- a/src/main/java/net/minecraft/server/NetworkManager.java
|
||||
+++ b/src/main/java/net/minecraft/server/NetworkManager.java
|
||||
@@ -150,6 +150,13 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet<?>> {
|
||||
}
|
||||
|
||||
private static <T extends PacketListener> void a(Packet<T> packet, PacketListener packetlistener) {
|
||||
+ // Purpur start - Ratelimit packets
|
||||
+ if (packetlistener instanceof PlayerConnection) {
|
||||
+ if (((PlayerConnection)packetlistener).rateLimitPacket(packet)) {
|
||||
+ return; // we've been killed as a result of rate limiting
|
||||
+ }
|
||||
+ }
|
||||
+ // Purpur end
|
||||
packet.a((T) packetlistener); // CraftBukkit - decompile error
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index fee512a47..e8851ffde 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -140,6 +140,62 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
return (this.player == null) ? null : (CraftPlayer) this.player.getBukkitEntity();
|
||||
}
|
||||
// CraftBukkit end
|
||||
+ // Purpur start - ratelimit packets
|
||||
+ /*
|
||||
+ * We cannot rely on tick() being called. If a server lags we could end up kicking everyone!
|
||||
+ * So we must rely on our own timer.
|
||||
+ */
|
||||
+ private final net.pl3x.purpur.network.PacketLimiter packetLimiter = net.pl3x.purpur.PurpurConfig.packetRateLimit < 0 ?
|
||||
+ null : new net.pl3x.purpur.network.PacketLimiter(net.pl3x.purpur.PurpurConfig.packetRateLimitInterval * 1000.0, 100);
|
||||
+ private boolean kickedForPacketSpam;
|
||||
+
|
||||
+ private static final java.text.DecimalFormat ONE_DECIMAL_PLACE = new java.text.DecimalFormat("0.0");
|
||||
+
|
||||
+ /**
|
||||
+ * @return {@code true} if the client has been killed as a result of rate limiting, {@code false} if not
|
||||
+ */
|
||||
+ boolean rateLimitPacket(final Packet<?> packet) {
|
||||
+ final net.pl3x.purpur.network.PacketLimiter limiter = this.packetLimiter;
|
||||
+ if (limiter == null) {
|
||||
+ // not configured
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ // avoid contending the lock if we've been kicked already
|
||||
+ if (this.kickedForPacketSpam) {
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ final int limit = net.pl3x.purpur.PurpurConfig.packetRateLimit;
|
||||
+
|
||||
+ synchronized (limiter) {
|
||||
+ // we need to re-check this, as it could have changed during the lock hold
|
||||
+ if (this.kickedForPacketSpam) {
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ final int packets = limiter.incrementPackets(1);
|
||||
+
|
||||
+ if (packets / (limiter.intervalTime / 1000.0) <= limit) {
|
||||
+ // below limit
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ this.kickedForPacketSpam = true;
|
||||
+ this.minecraftServer.postToMainThread(() -> {
|
||||
+ if (PlayerConnection.this.processedDisconnect) {
|
||||
+ return; // no point, we've disconnected already
|
||||
+ }
|
||||
+ PlayerConnection.this.disconnect(net.pl3x.purpur.PurpurConfig.packetRateLimitKickMessage);
|
||||
+ PlayerConnection.LOGGER.warn("{} was kicked for sending too many packets! {} in the last {} seconds",
|
||||
+ PlayerConnection.this.player.getDisplayName().getString(), packets,
|
||||
+ ONE_DECIMAL_PLACE.format(limiter.intervalTime / 1000.0));
|
||||
+ });
|
||||
+
|
||||
+ return true;
|
||||
+ }
|
||||
+ }
|
||||
+ // Purpur end
|
||||
|
||||
public void tick() {
|
||||
this.syncPosition();
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index 3f9913582..e791c52a4 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -140,6 +140,18 @@ public class PurpurConfig {
|
||||
loggerSuppressWorldGenFeatureDeserializationError = getBoolean("settings.logger.suppress-world-gen-feature-deserialization-errors", loggerSuppressWorldGenFeatureDeserializationError);
|
||||
}
|
||||
|
||||
+ public static int packetRateLimit = 250; // per second
|
||||
+ public static double packetRateLimitInterval = 10.0; // seconds
|
||||
+ public static String packetRateLimitKickMessage = "Sent too many packets";
|
||||
+ private static void packetRateLimit() {
|
||||
+ packetRateLimit = Math.max(-1, getInt("settings.spam-limiter.packets-per-second", packetRateLimit));
|
||||
+ packetRateLimitInterval = getDouble("settings.spam-limiter.packet-spam-interval", packetRateLimitInterval);
|
||||
+ private static void packetLimiterSettings() {
|
||||
+ packetRateLimit = Math.max(-1, getInt("settings.packet-limiter.packets-per-second", packetRateLimit));
|
||||
+ packetRateLimitInterval = getDouble("settings.packet-limiter.packet-spam-interval", packetRateLimitInterval);
|
||||
+ if (packetRateLimitInterval <= 0.0 && packetRateLimit >= 0) {
|
||||
+ fatal("If packet rate limiting is enabled, the rate limit interval must be greater-than 0!");
|
||||
+ log(Level.SEVERE, "If packet rate limiting is enabled, the rate limit interval must be greater than 0!");
|
||||
+ }
|
||||
+ packetRateLimitKickMessage = getString("messages.kick.packet-spam", packetRateLimitKickMessage);
|
||||
+ packetRateLimitKickMessage = getString("settings.packet-limiter.kick-message", packetRateLimitKickMessage);
|
||||
+ }
|
||||
+
|
||||
public static boolean asyncChunks = false;
|
||||
//public static boolean asyncChunkGeneration = true; // Leave out for now until we can control this
|
||||
//public static boolean asyncChunkGenThreadPerWorld = true; // Leave out for now until we can control this
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/network/PacketLimiter.java b/src/main/java/com/destroystokyo/paper/network/PacketLimiter.java
|
||||
public static boolean dontSendUselessEntityPackets = false;
|
||||
public static boolean fixItemPositionDesync = false;
|
||||
private static void dontSendUselessEntityPackets() {
|
||||
diff --git a/src/main/java/net/pl3x/purpur/network/PacketLimiter.java b/src/main/java/net/pl3x/purpur/network/PacketLimiter.java
|
||||
new file mode 100644
|
||||
index 0000000000..91c8c5f53a
|
||||
index 000000000..e51e7eb9d
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/com/destroystokyo/paper/network/PacketLimiter.java
|
||||
@@ -0,0 +1,135 @@
|
||||
+package com.destroystokyo.paper.network;
|
||||
+++ b/src/main/java/net/pl3x/purpur/network/PacketLimiter.java
|
||||
@@ -0,0 +1,147 @@
|
||||
+package net.pl3x.purpur.network;
|
||||
+
|
||||
+import java.util.Arrays;
|
||||
+
|
||||
+public class PacketLimiter {
|
||||
+
|
||||
+ /** multiplier to convert ns to ms */
|
||||
+ /**
|
||||
+ * multiplier to convert ns to ms
|
||||
+ */
|
||||
+ private static final double NANOSECONDS_TO_MILLISECONDS = 1.0e-6; // 1e3 / 1e9
|
||||
+
|
||||
+ /**
|
||||
@@ -64,27 +151,36 @@ index 0000000000..91c8c5f53a
|
||||
+ */
|
||||
+ public final int totalBuckets;
|
||||
+
|
||||
+ /**contains all packet data, note that indices of buckets will wrap around the array */
|
||||
+ /**
|
||||
+ * contains all packet data, note that indices of buckets will wrap around the array
|
||||
+ */
|
||||
+ private final int[] data;
|
||||
+
|
||||
+ /** pointer which represents the bucket containing the newest data */
|
||||
+ /**
|
||||
+ * pointer which represents the bucket containing the newest data
|
||||
+ */
|
||||
+ private int newestData;
|
||||
+
|
||||
+ /** the time attached to the bucket at newestData */
|
||||
+ /**
|
||||
+ * the time attached to the bucket at newestData
|
||||
+ */
|
||||
+ private double lastBucketTime;
|
||||
+
|
||||
+ /** cached sum of all data */
|
||||
+ /**
|
||||
+ * cached sum of all data
|
||||
+ */
|
||||
+ private int sum;
|
||||
+
|
||||
+ /**
|
||||
+ * Constructs a packetlimiter which will record total packets sent over the specified
|
||||
+ * interval time (in ms) with the specified number of buckets
|
||||
+ *
|
||||
+ * @param intervalTime The specified interval time, in ms
|
||||
+ * @param totalBuckets The total number of buckets
|
||||
+ */
|
||||
+ public PacketLimiter(final double intervalTime, final int totalBuckets) {
|
||||
+ this.intervalTime = intervalTime;
|
||||
+ this.intervalResolution = intervalTime/(double)totalBuckets;
|
||||
+ this.intervalResolution = intervalTime / (double) totalBuckets;
|
||||
+ this.totalBuckets = totalBuckets;
|
||||
+ this.data = new int[totalBuckets];
|
||||
+ }
|
||||
@@ -111,6 +207,7 @@ index 0000000000..91c8c5f53a
|
||||
+ /**
|
||||
+ * Adds to this limiter's packet count. Old data is automatically purged, and the current time from {@link System#nanoTime()}
|
||||
+ * is used to record this data. Returns the new packet count.
|
||||
+ *
|
||||
+ * @param packets The number of packets to attach to the current time
|
||||
+ * @return The new packet count
|
||||
+ */
|
||||
@@ -175,89 +272,6 @@ index 0000000000..91c8c5f53a
|
||||
+ return this.sum;
|
||||
+ }
|
||||
+}
|
||||
diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java
|
||||
index 96a785af27..ff8b5e76f3 100644
|
||||
--- a/src/main/java/net/minecraft/server/NetworkManager.java
|
||||
+++ b/src/main/java/net/minecraft/server/NetworkManager.java
|
||||
@@ -150,6 +150,13 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet<?>> {
|
||||
}
|
||||
|
||||
private static <T extends PacketListener> void a(Packet<T> packet, PacketListener packetlistener) {
|
||||
+ // Paper start - Ratelimit packets
|
||||
+ if (packetlistener instanceof PlayerConnection) {
|
||||
+ if (((PlayerConnection)packetlistener).rateLimitPacket(packet)) {
|
||||
+ return; // we've been killed as a result of rate limiting
|
||||
+ }
|
||||
+ }
|
||||
+ // Paper end
|
||||
packet.a((T) packetlistener); // CraftBukkit - decompile error
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index 925824c349..cdc81ff1e2 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -140,6 +140,60 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
return (this.player == null) ? null : (CraftPlayer) this.player.getBukkitEntity();
|
||||
}
|
||||
// CraftBukkit end
|
||||
+ // Paper start - ratelimit packets
|
||||
+ /*
|
||||
+ * We cannot rely on tick() being called. If a server lags we could end up kicking everyone!
|
||||
+ * So we must rely on our own timer.
|
||||
+ */
|
||||
+ private final com.destroystokyo.paper.network.PacketLimiter packetLimiter = com.destroystokyo.paper.PaperConfig.packetRateLimit < 0 ?
|
||||
+ null : new com.destroystokyo.paper.network.PacketLimiter(com.destroystokyo.paper.PaperConfig.packetRateLimitInterval * 1000.0, 100);
|
||||
+ private boolean kickedForPacketSpam;
|
||||
+
|
||||
+ private static final java.text.DecimalFormat ONE_DECIMAL_PLACE = new java.text.DecimalFormat("0.0");
|
||||
+
|
||||
+ /** @return {@code true} if the client has been killed as a result of rate limiting, {@code false} if not */
|
||||
+ boolean rateLimitPacket(final Packet<?> packet) {
|
||||
+ final com.destroystokyo.paper.network.PacketLimiter limiter = this.packetLimiter;
|
||||
+ if (limiter == null) {
|
||||
+ // not configured
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ // avoid contending the lock if we've been kicked already
|
||||
+ if (this.kickedForPacketSpam) {
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ final int limit = com.destroystokyo.paper.PaperConfig.packetRateLimit;
|
||||
+
|
||||
+ synchronized (limiter) {
|
||||
+ // we need to re-check this, as it could have changed during the lock hold
|
||||
+ if (this.kickedForPacketSpam) {
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ final int packets = limiter.incrementPackets(1);
|
||||
+
|
||||
+ if (packets / (limiter.intervalTime / 1000.0) <= limit) {
|
||||
+ // below limit
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ this.kickedForPacketSpam = true;
|
||||
+ this.minecraftServer.postToMainThread(() -> {
|
||||
+ if (PlayerConnection.this.processedDisconnect) {
|
||||
+ return; // no point, we've disconnected already
|
||||
+ }
|
||||
+ PlayerConnection.this.disconnect(com.destroystokyo.paper.PaperConfig.packetRateLimitKickMessage);
|
||||
+ PlayerConnection.LOGGER.warn("{} was kicked for sending too many packets! {} in the last {} seconds",
|
||||
+ PlayerConnection.this.player.getDisplayName().getString(), packets,
|
||||
+ ONE_DECIMAL_PLACE.format(limiter.intervalTime / 1000.0));
|
||||
+ });
|
||||
+
|
||||
+ return true;
|
||||
+ }
|
||||
+ }
|
||||
+ // Paper end
|
||||
|
||||
public void tick() {
|
||||
this.syncPosition();
|
||||
--
|
||||
2.24.0.rc1
|
||||
2.24.0
|
||||
|
||||
64
patches/server/0038-Fix-pig-zombies-MC-56653.patch
Normal file
64
patches/server/0038-Fix-pig-zombies-MC-56653.patch
Normal file
@@ -0,0 +1,64 @@
|
||||
From 66b0d01874ce9969852d99bd8b92376f035b5447 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Tue, 9 Jul 2019 20:56:47 -0500
|
||||
Subject: [PATCH] Fix pig zombies (MC-56653)
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityPigZombie.java | 9 ++++++++-
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 2 ++
|
||||
2 files changed, 10 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityPigZombie.java b/src/main/java/net/minecraft/server/EntityPigZombie.java
|
||||
index fb9ef88ea..227fff3f1 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityPigZombie.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityPigZombie.java
|
||||
@@ -155,6 +155,7 @@ public class EntityPigZombie extends EntityZombie {
|
||||
boolean result = super.damageEntity(damagesource, f);
|
||||
|
||||
if (result && entity instanceof EntityHuman && !((EntityHuman) entity).isCreative() && this.hasLineOfSight(entity)) {
|
||||
+ if (world.purpurConfig.zombiePigmanDontTargetUnlessHit) this.setLastDamager((EntityHuman) entity); // Purpur - fix MC-56653
|
||||
this.i((EntityLiving) entity);
|
||||
}
|
||||
|
||||
@@ -173,7 +174,7 @@ public class EntityPigZombie extends EntityZombie {
|
||||
this.angerLevel = event.getNewAnger();
|
||||
// CraftBukkit end
|
||||
this.soundDelay = this.random.nextInt(40);
|
||||
- this.setLastDamager(entityliving);
|
||||
+ if (!world.purpurConfig.zombiePigmanDontTargetUnlessHit) this.setLastDamager(entityliving); // Purpur - fix MC-56653
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -215,6 +216,12 @@ public class EntityPigZombie extends EntityZombie {
|
||||
return this.eA();
|
||||
}
|
||||
|
||||
+ // Purpur start - fix MC-56653
|
||||
+ protected boolean isDropExperience() {
|
||||
+ return super.isDropExperience() && (!world.purpurConfig.zombiePigmanDontTargetUnlessHit || getLastDamager() instanceof EntityHuman);
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
static class PathfinderGoalAnger extends PathfinderGoalNearestAttackableTarget<EntityHuman> {
|
||||
|
||||
public PathfinderGoalAnger(EntityPigZombie entitypigzombie) {
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index be2f6bac1..e660121df 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -774,10 +774,12 @@ public class PurpurWorldConfig {
|
||||
public boolean zombiePigmanRidable = false;
|
||||
public boolean zombiePigmanRidableInWater = false;
|
||||
public boolean zombiePigmanRequireShiftToMount = true;
|
||||
+ public boolean zombiePigmanDontTargetUnlessHit = false;
|
||||
private void zombiePigmanSettings() {
|
||||
zombiePigmanRidable = getBoolean("mobs.zombie_pigman.ridable", zombiePigmanRidable);
|
||||
zombiePigmanRidableInWater = getBoolean("mobs.zombie_pigman.ridable-in-water", zombiePigmanRidableInWater);
|
||||
zombiePigmanRequireShiftToMount = getBoolean("mobs.zombie_pigman.require-shift-to-mount", zombiePigmanRequireShiftToMount);
|
||||
+ zombiePigmanDontTargetUnlessHit = getBoolean("mobs.zombie_pigman.dont-target-unless-hit", zombiePigmanDontTargetUnlessHit);
|
||||
}
|
||||
|
||||
public boolean zombieVillagerRidable = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From 4337b1d75f67fd41da02eda525fac381840a33de Mon Sep 17 00:00:00 2001
|
||||
From 50380a3f922e7c37c0840a1ee205c5b76cea0fd7 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Thu, 8 Aug 2019 15:29:15 -0500
|
||||
Subject: [PATCH] Implement AFK API
|
||||
@@ -17,10 +17,10 @@ Subject: [PATCH] Implement AFK API
|
||||
10 files changed, 112 insertions(+), 24 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
||||
index 3be37a1008..9904b78c6c 100644
|
||||
index dbd7236d8..a2fe1a424 100644
|
||||
--- a/src/main/java/net/minecraft/server/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/server/Entity.java
|
||||
@@ -1375,6 +1375,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
||||
@@ -1373,6 +1373,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
||||
return MathHelper.c(f * f + f1 * f1 + f2 * f2);
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ index 3be37a1008..9904b78c6c 100644
|
||||
double d3 = this.locX() - d0;
|
||||
double d4 = this.locY() - d1;
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
index de22cad764..9d26bd1e4c 100644
|
||||
index de22cad76..9d26bd1e4 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
@@ -86,6 +86,15 @@ public abstract class EntityHuman extends EntityLiving {
|
||||
@@ -49,7 +49,7 @@ index de22cad764..9d26bd1e4c 100644
|
||||
super(EntityTypes.PLAYER, world);
|
||||
this.bV = ItemStack.a;
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
index d72b45119d..6022079a9d 100644
|
||||
index 415cdb1c3..670dcf282 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
@@ -1615,8 +1615,51 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
@@ -105,7 +105,7 @@ index d72b45119d..6022079a9d 100644
|
||||
return this.serverStatisticManager;
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/IEntityAccess.java b/src/main/java/net/minecraft/server/IEntityAccess.java
|
||||
index 774ec96f0a..5ef8816340 100644
|
||||
index 774ec96f0..5ef881634 100644
|
||||
--- a/src/main/java/net/minecraft/server/IEntityAccess.java
|
||||
+++ b/src/main/java/net/minecraft/server/IEntityAccess.java
|
||||
@@ -116,28 +116,18 @@ public interface IEntityAccess {
|
||||
@@ -150,7 +150,7 @@ index 774ec96f0a..5ef8816340 100644
|
||||
|
||||
@Nullable
|
||||
diff --git a/src/main/java/net/minecraft/server/IEntitySelector.java b/src/main/java/net/minecraft/server/IEntitySelector.java
|
||||
index 8d7273a38b..71c61dc45e 100644
|
||||
index e1fdee279..4665671ef 100644
|
||||
--- a/src/main/java/net/minecraft/server/IEntitySelector.java
|
||||
+++ b/src/main/java/net/minecraft/server/IEntitySelector.java
|
||||
@@ -7,6 +7,7 @@ import javax.annotation.Nullable;
|
||||
@@ -161,19 +161,19 @@ index 8d7273a38b..71c61dc45e 100644
|
||||
public static final Predicate<EntityLiving> b = EntityLiving::isAlive;
|
||||
public static final Predicate<Entity> c = (entity) -> {
|
||||
return entity.isAlive() && !entity.isVehicle() && !entity.isPassenger();
|
||||
@@ -23,6 +24,7 @@ public final class IEntitySelector {
|
||||
public static final Predicate<Entity> f = (entity) -> {
|
||||
@@ -24,6 +25,7 @@ public final class IEntitySelector {
|
||||
return !entity.isSpectator();
|
||||
};
|
||||
public static Predicate<EntityHuman> isInsomniac = (player) -> MathHelper.clamp(((EntityPlayer) player).getStatisticManager().getStatisticValue(StatisticList.CUSTOM.b(StatisticList.TIME_SINCE_REST)), 1, Integer.MAX_VALUE) >= 72000; // Purpur
|
||||
+ public static Predicate<EntityHuman> notAfk = (player) -> !player.isAfk(); // Purpur
|
||||
|
||||
public static Predicate<Entity> a(double d0, double d1, double d2, double d3) {
|
||||
double d4 = d3 * d3;
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index a4af019bc6..2db59c55ca 100644
|
||||
index e8851ffde..d897c7fd4 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -277,6 +277,12 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -279,6 +279,12 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
}
|
||||
|
||||
if (this.player.F() > 0L && this.minecraftServer.getIdleTimeout() > 0 && SystemUtils.getMonotonicMillis() - this.player.F() > (long) (this.minecraftServer.getIdleTimeout() * 1000 * 60)) {
|
||||
@@ -186,7 +186,7 @@ index a4af019bc6..2db59c55ca 100644
|
||||
this.player.resetIdleTimer(); // CraftBukkit - SPIGOT-854
|
||||
this.disconnect(new ChatMessage("multiplayer.disconnect.idling", new Object[0]));
|
||||
}
|
||||
@@ -493,6 +499,8 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -495,6 +501,8 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
this.lastYaw = to.getYaw();
|
||||
this.lastPitch = to.getPitch();
|
||||
|
||||
@@ -195,7 +195,7 @@ index a4af019bc6..2db59c55ca 100644
|
||||
// Skip the first time we do this
|
||||
if (true) { // Spigot - don't skip any move events
|
||||
Location oldTo = to.clone();
|
||||
@@ -1162,6 +1170,8 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -1164,6 +1172,8 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
this.lastYaw = to.getYaw();
|
||||
this.lastPitch = to.getPitch();
|
||||
|
||||
@@ -205,7 +205,7 @@ index a4af019bc6..2db59c55ca 100644
|
||||
if (from.getX() != Double.MAX_VALUE) {
|
||||
Location oldTo = to.clone();
|
||||
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
|
||||
index 2d0db3e05f..04685efc52 100644
|
||||
index 874b8c129..567b297e0 100644
|
||||
--- a/src/main/java/net/minecraft/server/WorldServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/WorldServer.java
|
||||
@@ -376,7 +376,7 @@ public class WorldServer extends World {
|
||||
@@ -217,7 +217,7 @@ index 2d0db3e05f..04685efc52 100644
|
||||
})) {
|
||||
// CraftBukkit start
|
||||
long l = this.worldData.getDayTime() + 24000L;
|
||||
@@ -657,7 +657,7 @@ public class WorldServer extends World {
|
||||
@@ -682,7 +682,7 @@ public class WorldServer extends World {
|
||||
while (iterator.hasNext()) {
|
||||
EntityPlayer entityplayer = (EntityPlayer) iterator.next();
|
||||
|
||||
@@ -227,33 +227,33 @@ index 2d0db3e05f..04685efc52 100644
|
||||
} else if (entityplayer.isSleeping()) {
|
||||
++j;
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 6d875b78b9..7422f361e4 100644
|
||||
index e660121df..6fb0d94a8 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -106,6 +106,21 @@ public class PurpurWorldConfig {
|
||||
allowSignColors = getBoolean("allow-sign-colors", allowSignColors);
|
||||
@@ -146,6 +146,21 @@ public class PurpurWorldConfig {
|
||||
disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath);
|
||||
}
|
||||
|
||||
+ public boolean idleTimeoutKick = true;
|
||||
+ public boolean idleTimeoutTickNearbyEntities = false;
|
||||
+ public boolean idleTimeoutTickNearbyEntities = true;
|
||||
+ public boolean idleTimeoutCountAsSleeping = false;
|
||||
+ public boolean idleTimeoutUpdateTabList = true;
|
||||
+ public boolean idleTimeoutUpdateTabList = false;
|
||||
+ public String idleTimeoutBroadcastAway = "&e&o{player} is now AFK";
|
||||
+ public String idleTimeoutBroadcastBack = "&e&o{player} is no longer AFK";
|
||||
+ private void playerIdleTimeoutSettings() {
|
||||
+ idleTimeoutKick = getBoolean("idle-timeout.kick-if-idle", idleTimeoutKick);
|
||||
+ idleTimeoutTickNearbyEntities = getBoolean("idle-timeout.tick-nearby-entities", idleTimeoutTickNearbyEntities);
|
||||
+ idleTimeoutCountAsSleeping = getBoolean("idle-timeout.count-as-sleeping", idleTimeoutCountAsSleeping);
|
||||
+ idleTimeoutUpdateTabList = getBoolean("idle-timeout.update-tab-list", idleTimeoutUpdateTabList);
|
||||
+ idleTimeoutBroadcastAway = org.bukkit.ChatColor.translateAlternateColorCodes('&', getString("idle-timeout.broadcast.away", idleTimeoutBroadcastAway));
|
||||
+ idleTimeoutBroadcastBack = org.bukkit.ChatColor.translateAlternateColorCodes('&', getString("idle-timeout.broadcast.back", idleTimeoutBroadcastBack));
|
||||
+ private void idleTimeoutSettings() {
|
||||
+ idleTimeoutKick = getBoolean("gameplay-mechanics.player.idle-timeout.kick-if-idle", idleTimeoutKick);
|
||||
+ idleTimeoutTickNearbyEntities = getBoolean("gameplay-mechanics.player.idle-timeout.tick-nearby-entities", idleTimeoutTickNearbyEntities);
|
||||
+ idleTimeoutCountAsSleeping = getBoolean("gameplay-mechanics.player.idle-timeout.count-as-sleeping", idleTimeoutCountAsSleeping);
|
||||
+ idleTimeoutUpdateTabList = getBoolean("gameplay-mechanics.player.idle-timeout.update-tab-list", idleTimeoutUpdateTabList);
|
||||
+ idleTimeoutBroadcastAway = org.bukkit.ChatColor.translateAlternateColorCodes('&', getString("gameplay-mechanics.player.idle-timeout.broadcast.away", idleTimeoutBroadcastAway));
|
||||
+ idleTimeoutBroadcastBack = org.bukkit.ChatColor.translateAlternateColorCodes('&', getString("gameplay-mechanics.player.idle-timeout.broadcast.back", idleTimeoutBroadcastBack));
|
||||
+ }
|
||||
+
|
||||
public boolean itemsCanBreakTurtleEggs = false;
|
||||
private void itemsCanBreakTurtleEggs() {
|
||||
itemsCanBreakTurtleEggs = getBoolean("items-can-break-turtle-eggs", itemsCanBreakTurtleEggs);
|
||||
public boolean batRidable = false;
|
||||
public boolean batRidableInWater = false;
|
||||
public boolean batRequireShiftToMount = true;
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index c1acec87f9..8c5d7bd2b3 100644
|
||||
index c1acec87f..8c5d7bd2b 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -2089,4 +2089,21 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
@@ -279,7 +279,7 @@ index c1acec87f9..8c5d7bd2b3 100644
|
||||
+ // Purpur end
|
||||
}
|
||||
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
|
||||
index 6e165a1649..da5fef091a 100644
|
||||
index 6e165a164..da5fef091 100644
|
||||
--- a/src/main/java/org/spigotmc/ActivationRange.java
|
||||
+++ b/src/main/java/org/spigotmc/ActivationRange.java
|
||||
@@ -137,6 +137,7 @@ public class ActivationRange
|
||||
@@ -0,0 +1,48 @@
|
||||
From f32212737ecbc1ebcd603e0099cd50ad3afb330d Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Wed, 10 Jul 2019 20:43:05 -0500
|
||||
Subject: [PATCH] Option to toggle milk curing bad omen
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/ItemMilkBucket.java | 3 +++
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 2 ++
|
||||
2 files changed, 5 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ItemMilkBucket.java b/src/main/java/net/minecraft/server/ItemMilkBucket.java
|
||||
index 6b255e09a..e1d3894ab 100644
|
||||
--- a/src/main/java/net/minecraft/server/ItemMilkBucket.java
|
||||
+++ b/src/main/java/net/minecraft/server/ItemMilkBucket.java
|
||||
@@ -20,7 +20,10 @@ public class ItemMilkBucket extends Item {
|
||||
}
|
||||
|
||||
if (!world.isClientSide) {
|
||||
+ MobEffect badOmen = entityliving.getEffect(MobEffects.BAD_OMEN); // Purpur
|
||||
entityliving.removeAllEffects(org.bukkit.event.entity.EntityPotionEffectEvent.Cause.MILK); // CraftBukkit
|
||||
+ if (!world.purpurConfig.milkCuresBadOmen && badOmen != null) entityliving.addEffect(badOmen); // Purpur
|
||||
+
|
||||
}
|
||||
|
||||
return itemstack.isEmpty() ? new ItemStack(Items.BUCKET) : itemstack;
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 6fb0d94a8..fabe7d8e0 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -125,6 +125,7 @@ public class PurpurWorldConfig {
|
||||
public double controllableMinecartsBaseSpeed = 0.1D;
|
||||
public Map<Block, Double> controllableMinecartsBlockSpeeds = new HashMap<>();
|
||||
public boolean disableDropsOnCrammingDeath = false;
|
||||
+ public boolean milkCuresBadOmen = true;
|
||||
private void gameplayMechanicsSettings() {
|
||||
controllableMinecarts = getBoolean("gameplay-mechanics.controllable-minecarts.enabled", controllableMinecarts);
|
||||
controllableMinecartsPlaceAnywhere = getBoolean("gameplay-mechanics.controllable-minecarts.place-anywhere", controllableMinecartsPlaceAnywhere);
|
||||
@@ -144,6 +145,7 @@ public class PurpurWorldConfig {
|
||||
set("gameplay-mechanics.controllable-minecarts.block-speed.stone", 0.5D);
|
||||
}
|
||||
disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath);
|
||||
+ milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen);
|
||||
}
|
||||
|
||||
public boolean idleTimeoutKick = true;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From 66f5145a4f2f12ad8346fcc523eecdbb4ef1e3f8 Mon Sep 17 00:00:00 2001
|
||||
From 0af23b306c8cc1c31a9741805c530da56b6ea951 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sun, 14 Jul 2019 19:52:47 -0500
|
||||
Subject: [PATCH] Mending mends most damages equipment first
|
||||
@@ -7,11 +7,11 @@ Subject: [PATCH] Mending mends most damages equipment first
|
||||
.../minecraft/server/EnchantmentManager.java | 25 ++++++++++++++++++-
|
||||
.../minecraft/server/EntityExperienceOrb.java | 2 +-
|
||||
.../java/net/minecraft/server/ItemStack.java | 9 +++++++
|
||||
.../java/net/pl3x/purpur/PurpurConfig.java | 5 ++++
|
||||
4 files changed, 39 insertions(+), 2 deletions(-)
|
||||
.../net/pl3x/purpur/PurpurWorldConfig.java | 2 ++
|
||||
4 files changed, 36 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EnchantmentManager.java b/src/main/java/net/minecraft/server/EnchantmentManager.java
|
||||
index d96c03a1a1..79f9a8776f 100644
|
||||
index d96c03a1a..da1cfc1d3 100644
|
||||
--- a/src/main/java/net/minecraft/server/EnchantmentManager.java
|
||||
+++ b/src/main/java/net/minecraft/server/EnchantmentManager.java
|
||||
@@ -246,9 +246,32 @@ public class EnchantmentManager {
|
||||
@@ -44,12 +44,12 @@ index d96c03a1a1..79f9a8776f 100644
|
||||
// Paper - OBFHELPER
|
||||
public static @javax.annotation.Nonnull ItemStack getRandomEquippedItemWithEnchant(Enchantment enchantment, EntityLiving entityliving) {
|
||||
- Entry<EnumItemSlot, ItemStack> entry = b(enchantment, entityliving);
|
||||
+ Entry<EnumItemSlot, ItemStack> entry = enchantment == Enchantments.MENDING && net.pl3x.purpur.PurpurConfig.useBetterMending ? getMostDamagedEquipment(enchantment, entityliving) : b(enchantment, entityliving); // Purpur
|
||||
+ Entry<EnumItemSlot, ItemStack> entry = enchantment == Enchantments.MENDING && entityliving.world.purpurConfig.useBetterMending ? getMostDamagedEquipment(enchantment, entityliving) : b(enchantment, entityliving); // Purpur
|
||||
return entry != null ? entry.getValue() : ItemStack.NULL_ITEM;
|
||||
}
|
||||
@Nullable
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityExperienceOrb.java b/src/main/java/net/minecraft/server/EntityExperienceOrb.java
|
||||
index 53c6c33892..462e0976a4 100644
|
||||
index 53c6c3389..0fae3693c 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityExperienceOrb.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityExperienceOrb.java
|
||||
@@ -225,7 +225,7 @@ public class EntityExperienceOrb extends Entity {
|
||||
@@ -57,12 +57,12 @@ index 53c6c33892..462e0976a4 100644
|
||||
entityhuman.bC = 2;
|
||||
entityhuman.receive(this, 1);
|
||||
- Entry<EnumItemSlot, ItemStack> entry = EnchantmentManager.b(Enchantments.MENDING, (EntityLiving) entityhuman);
|
||||
+ Entry<EnumItemSlot, ItemStack> entry = net.pl3x.purpur.PurpurConfig.useBetterMending ? EnchantmentManager.getMostDamagedEquipment(Enchantments.MENDING, entityhuman) : EnchantmentManager.b(Enchantments.MENDING, entityhuman); // Purpur
|
||||
+ Entry<EnumItemSlot, ItemStack> entry = world.purpurConfig.useBetterMending ? EnchantmentManager.getMostDamagedEquipment(Enchantments.MENDING, entityhuman) : EnchantmentManager.b(Enchantments.MENDING, entityhuman); // Purpur
|
||||
|
||||
if (entry != null) {
|
||||
ItemStack itemstack = (ItemStack) entry.getValue();
|
||||
diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java
|
||||
index d6e43313bf..72ce83a2d9 100644
|
||||
index 4730c2beb..4fe503808 100644
|
||||
--- a/src/main/java/net/minecraft/server/ItemStack.java
|
||||
+++ b/src/main/java/net/minecraft/server/ItemStack.java
|
||||
@@ -369,10 +369,19 @@ public final class ItemStack {
|
||||
@@ -85,22 +85,26 @@ index d6e43313bf..72ce83a2d9 100644
|
||||
public int getDamage() {
|
||||
return this.tag == null ? 0 : this.tag.getInt("Damage");
|
||||
}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index 8396509c88..83112e6ec0 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -151,6 +151,11 @@ public class PurpurConfig {
|
||||
fixItemPositionDesync = getBoolean("settings.fix-item-position-desync", fixItemPositionDesync);
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index fabe7d8e0..61a04c4f8 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -126,6 +126,7 @@ public class PurpurWorldConfig {
|
||||
public Map<Block, Double> controllableMinecartsBlockSpeeds = new HashMap<>();
|
||||
public boolean disableDropsOnCrammingDeath = false;
|
||||
public boolean milkCuresBadOmen = true;
|
||||
+ public boolean useBetterMending = false;
|
||||
private void gameplayMechanicsSettings() {
|
||||
controllableMinecarts = getBoolean("gameplay-mechanics.controllable-minecarts.enabled", controllableMinecarts);
|
||||
controllableMinecartsPlaceAnywhere = getBoolean("gameplay-mechanics.controllable-minecarts.place-anywhere", controllableMinecartsPlaceAnywhere);
|
||||
@@ -146,6 +147,7 @@ public class PurpurWorldConfig {
|
||||
}
|
||||
disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath);
|
||||
milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen);
|
||||
+ useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending);
|
||||
}
|
||||
|
||||
+ public static boolean useBetterMending = true;
|
||||
+ private static void useBetterMending() {
|
||||
+ useBetterMending = getBoolean("settings.use-better-mending", useBetterMending);
|
||||
+ }
|
||||
+
|
||||
public static boolean requireShiftToMount = true;
|
||||
private static void requireShiftToMount() {
|
||||
requireShiftToMount = getBoolean("settings.mobs.require-shift-to-mount", requireShiftToMount);
|
||||
public boolean idleTimeoutKick = true;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
From 52098952462100f7b41d327425281338603608e1 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Mon, 22 Jul 2019 17:32:17 -0500
|
||||
Subject: [PATCH] Implement configurable search radius for villagers to spawn
|
||||
iron golems
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityVillager.java | 5 +----
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 7 +++++++
|
||||
2 files changed, 8 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java
|
||||
index 7e7818903..d7f7a0b48 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityVillager.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityVillager.java
|
||||
@@ -12,18 +12,14 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
-import java.util.Map.Entry;
|
||||
import java.util.function.BiPredicate;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.annotation.Nullable;
|
||||
// CraftBukkit start
|
||||
import org.bukkit.Bukkit;
|
||||
-import org.bukkit.craftbukkit.entity.CraftVillager;
|
||||
import org.bukkit.craftbukkit.event.CraftEventFactory;
|
||||
-import org.bukkit.craftbukkit.inventory.CraftMerchantRecipe;
|
||||
import org.bukkit.entity.Villager;
|
||||
import org.bukkit.event.entity.EntityTransformEvent;
|
||||
-import org.bukkit.event.entity.VillagerAcquireTradeEvent;
|
||||
import org.bukkit.event.entity.VillagerReplenishTradeEvent;
|
||||
// CraftBukkit end
|
||||
|
||||
@@ -881,6 +877,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation
|
||||
|
||||
@Nullable
|
||||
private EntityIronGolem fb() {
|
||||
+ if (world.purpurConfig.villagerSpawnIronGolemRadius > 0 && world.a(EntityIronGolem.class, getBoundingBox().grow(world.purpurConfig.villagerSpawnIronGolemRadius)).size() > world.purpurConfig.villagerSpawnIronGolemLimit) return null; // Purpur
|
||||
BlockPosition blockposition = new BlockPosition(this);
|
||||
int i = 0;
|
||||
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 66dd66f06..6cc6d8015 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -136,6 +136,13 @@ public class PurpurWorldConfig {
|
||||
pillagerLimitOutpostSpawns = getInt("mobs.pillager.limit-outpost-spawns", pillagerLimitOutpostSpawns);
|
||||
}
|
||||
|
||||
+ public int villagerSpawnIronGolemRadius = 0;
|
||||
+ public int villagerSpawnIronGolemLimit = 5;
|
||||
+ private void villagerSettings() {
|
||||
+ villagerSpawnIronGolemRadius = getInt("mobs.villager.spawn-iron-golem.radius", villagerSpawnIronGolemRadius);
|
||||
+ villagerSpawnIronGolemLimit = getInt("mobs.villager.spawn-iron-golem.limit", villagerSpawnIronGolemLimit);
|
||||
+ }
|
||||
+
|
||||
public float zombieHorseSpawnChance = 0F;
|
||||
private void zombieHorseSettings() {
|
||||
zombieHorseSpawnChance = (float) getDouble("mobs.zombie_horse.spawn-chance", zombieHorseSpawnChance);
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,31 +1,44 @@
|
||||
From 803c0cf62b101817c67792d4794ee4120070f1cf Mon Sep 17 00:00:00 2001
|
||||
From 74e205e486a55d635df5dfbc6b9af664cb7322ba Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 13 Jul 2019 15:56:22 -0500
|
||||
Subject: [PATCH] Tulips change fox type
|
||||
|
||||
---
|
||||
.../java/net/minecraft/server/EntityFox.java | 27 +++++++++++++++++++
|
||||
.../java/net/minecraft/server/EntityFox.java | 33 +++++++++++++++++--
|
||||
src/main/java/net/minecraft/server/Items.java | 4 +--
|
||||
.../net/pl3x/purpur/PurpurWorldConfig.java | 5 ++++
|
||||
3 files changed, 34 insertions(+), 2 deletions(-)
|
||||
.../net/pl3x/purpur/PurpurWorldConfig.java | 2 ++
|
||||
3 files changed, 34 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityFox.java b/src/main/java/net/minecraft/server/EntityFox.java
|
||||
index 738e6cb8f7..744640450a 100644
|
||||
index 4f53090d3..13afd7bcd 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityFox.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityFox.java
|
||||
@@ -228,6 +228,11 @@ public class EntityFox extends EntityAnimal {
|
||||
@@ -37,9 +37,9 @@ public class EntityFox extends EntityAnimal {
|
||||
private static final Predicate<Entity> bD = (entity) -> {
|
||||
return !entity.bm() && IEntitySelector.e.test(entity);
|
||||
};
|
||||
- private PathfinderGoal bE;
|
||||
- private PathfinderGoal bF;
|
||||
- private PathfinderGoal bG;
|
||||
+ private PathfinderGoal bE; private PathfinderGoal attackAnimalGoal() { return bE; } // Purpur - OBFHELPER
|
||||
+ private PathfinderGoal bF; private PathfinderGoal attackTurtleGoal() { return bF; } // Purpur - OBFHELPER
|
||||
+ private PathfinderGoal bG; private PathfinderGoal attackFishGoal() { return bG; } // Purpur - OBFHELPER
|
||||
private float bH;
|
||||
private float bI;
|
||||
private float bJ;
|
||||
@@ -245,6 +245,11 @@ public class EntityFox extends EntityAnimal {
|
||||
}
|
||||
|
||||
private void initializePathFinderGoals() {
|
||||
+ // Purpur start - do not add duplicate goals
|
||||
+ this.targetSelector.a(this.bE);
|
||||
+ this.targetSelector.a(this.bF);
|
||||
+ this.targetSelector.a(this.bG);
|
||||
+ this.targetSelector.a(attackAnimalGoal());
|
||||
+ this.targetSelector.a(attackTurtleGoal());
|
||||
+ this.targetSelector.a(attackFishGoal());
|
||||
+ // Purpur end
|
||||
if (this.getFoxType() == EntityFox.Type.RED) {
|
||||
this.targetSelector.a(4, this.bE);
|
||||
this.targetSelector.a(4, this.bF);
|
||||
@@ -260,6 +265,7 @@ public class EntityFox extends EntityAnimal {
|
||||
@@ -277,6 +282,7 @@ public class EntityFox extends EntityAnimal {
|
||||
|
||||
public void setFoxType(EntityFox.Type entityfox_type) {
|
||||
this.datawatcher.set(EntityFox.bw, entityfox_type.c());
|
||||
@@ -33,21 +46,21 @@ index 738e6cb8f7..744640450a 100644
|
||||
}
|
||||
|
||||
private List<UUID> eE() {
|
||||
@@ -605,6 +611,27 @@ public class EntityFox extends EntityAnimal {
|
||||
return getRider() == null ? super.dp() : 0.5F;
|
||||
@@ -620,6 +626,27 @@ public class EntityFox extends EntityAnimal {
|
||||
return !hasRider() ? super.getJumpHeight() : 0.5F;
|
||||
}
|
||||
|
||||
+ @Override
|
||||
+ public boolean a(EntityHuman entityhuman, EnumHand enumhand) {
|
||||
+ if (world.purpurConfig.foxTypeChangesWithTulips) {
|
||||
+ ItemStack itemstack = entityhuman.b(enumhand);
|
||||
+ if (getFoxType() == Type.RED && itemstack.getItem() == Items.WHITE_TULIP) {
|
||||
+ if (getFoxType() == Type.RED && itemstack.getItem() == Items.whiteTulip()) {
|
||||
+ setFoxType(Type.SNOW);
|
||||
+ if (!entityhuman.abilities.canInstantlyBuild) {
|
||||
+ itemstack.subtract(1);
|
||||
+ }
|
||||
+ return true;
|
||||
+ } else if (getFoxType() == Type.SNOW && itemstack.getItem() == Items.ORANGE_TULIP) {
|
||||
+ } else if (getFoxType() == Type.SNOW && itemstack.getItem() == Items.orangeTulip()) {
|
||||
+ setFoxType(Type.RED);
|
||||
+ if (!entityhuman.abilities.canInstantlyBuild) {
|
||||
+ itemstack.subtract(1);
|
||||
@@ -62,7 +75,7 @@ index 738e6cb8f7..744640450a 100644
|
||||
public void onMount(EntityHuman entityhuman) {
|
||||
super.onMount(entityhuman);
|
||||
diff --git a/src/main/java/net/minecraft/server/Items.java b/src/main/java/net/minecraft/server/Items.java
|
||||
index 282fbca4fc..b261da87b7 100644
|
||||
index 54670f64c..9c9b93f28 100644
|
||||
--- a/src/main/java/net/minecraft/server/Items.java
|
||||
+++ b/src/main/java/net/minecraft/server/Items.java
|
||||
@@ -106,8 +106,8 @@ public class Items {
|
||||
@@ -71,27 +84,28 @@ index 282fbca4fc..b261da87b7 100644
|
||||
public static final Item aZ = a(Blocks.RED_TULIP, CreativeModeTab.c);
|
||||
- public static final Item ba = a(Blocks.ORANGE_TULIP, CreativeModeTab.c);
|
||||
- public static final Item bb = a(Blocks.WHITE_TULIP, CreativeModeTab.c);
|
||||
+ public static final Item ba = a(Blocks.ORANGE_TULIP, CreativeModeTab.c); public static final Item ORANGE_TULIP = ba; // Purpur - OBFHELPER
|
||||
+ public static final Item bb = a(Blocks.WHITE_TULIP, CreativeModeTab.c); public static final Item WHITE_TULIP = bb; // Purpur - OBFHELPER
|
||||
+ public static final Item ba = a(Blocks.ORANGE_TULIP, CreativeModeTab.c); public static Item orangeTulip() { return ba; } // Purpur - OBFHELPER
|
||||
+ public static final Item bb = a(Blocks.WHITE_TULIP, CreativeModeTab.c); public static Item whiteTulip() { return bb; } // Purpur - OBFHELPER
|
||||
public static final Item bc = a(Blocks.PINK_TULIP, CreativeModeTab.c);
|
||||
public static final Item bd = a(Blocks.OXEYE_DAISY, CreativeModeTab.c);
|
||||
public static final Item be = a(Blocks.CORNFLOWER, CreativeModeTab.c);
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 81ece70d38..e5ea54a206 100644
|
||||
index 61a04c4f8..eac751fcb 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -121,6 +121,11 @@ public class PurpurWorldConfig {
|
||||
enderDragonAlwaysDropsEggBlock = getBoolean("mobs.ender-dragon.always-drop-egg-block", enderDragonAlwaysDropsEggBlock);
|
||||
@@ -341,10 +341,12 @@ public class PurpurWorldConfig {
|
||||
public boolean foxRidable = false;
|
||||
public boolean foxRidableInWater = false;
|
||||
public boolean foxRequireShiftToMount = true;
|
||||
+ public boolean foxTypeChangesWithTulips = false;
|
||||
private void foxSettings() {
|
||||
foxRidable = getBoolean("mobs.fox.ridable", foxRidable);
|
||||
foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater);
|
||||
foxRequireShiftToMount = getBoolean("mobs.fox.require-shift-to-mount", foxRequireShiftToMount);
|
||||
+ foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips);
|
||||
}
|
||||
|
||||
+ public boolean foxTypeChangesWithTulips = true;
|
||||
+ private void foxSettings() {
|
||||
+ foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips);
|
||||
+ }
|
||||
+
|
||||
public boolean pigmenDontTargetUnlessHit = false;
|
||||
private void pigmenSettings() {
|
||||
pigmenDontTargetUnlessHit = getBoolean("mobs.pigmen.dont-target-unless-hit", pigmenDontTargetUnlessHit);
|
||||
public boolean ghastRidable = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
From 8c9db74b61fed29c35db8183f770e892eeac8eeb Mon Sep 17 00:00:00 2001
|
||||
From e62a29aa185eb7475b0cd9ad9625fb05afa52bb6 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Mon, 22 Jul 2019 14:24:26 -0500
|
||||
Subject: [PATCH] Implement a hard limit for pillager outpost spawns
|
||||
|
||||
---
|
||||
.../java/net/minecraft/server/ChunkProviderGenerate.java | 1 +
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 5 +++++
|
||||
2 files changed, 6 insertions(+)
|
||||
src/main/java/net/minecraft/server/ChunkProviderGenerate.java | 1 +
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 2 ++
|
||||
2 files changed, 3 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ChunkProviderGenerate.java b/src/main/java/net/minecraft/server/ChunkProviderGenerate.java
|
||||
index 70f43c5159..baca8f7054 100644
|
||||
index 70f43c515..baca8f705 100644
|
||||
--- a/src/main/java/net/minecraft/server/ChunkProviderGenerate.java
|
||||
+++ b/src/main/java/net/minecraft/server/ChunkProviderGenerate.java
|
||||
@@ -143,6 +143,7 @@ public class ChunkProviderGenerate extends ChunkGeneratorAbstract<GeneratorSetti
|
||||
@@ -21,21 +21,22 @@ index 70f43c5159..baca8f7054 100644
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index e5ea54a206..66dd66f062 100644
|
||||
index eac751fcb..246bb5128 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -131,6 +131,11 @@ public class PurpurWorldConfig {
|
||||
pigmenDontTargetUnlessHit = getBoolean("mobs.pigmen.dont-target-unless-hit", pigmenDontTargetUnlessHit);
|
||||
@@ -531,10 +531,12 @@ public class PurpurWorldConfig {
|
||||
public boolean pillagerRidable = false;
|
||||
public boolean pillagerRidableInWater = false;
|
||||
public boolean pillagerRequireShiftToMount = true;
|
||||
+ public int pillagerLimitOutpostSpawns = 0;
|
||||
private void pillagerSettings() {
|
||||
pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable);
|
||||
pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater);
|
||||
pillagerRequireShiftToMount = getBoolean("mobs.pillager.require-shift-to-mount", pillagerRequireShiftToMount);
|
||||
+ pillagerLimitOutpostSpawns = getInt("mobs.pillager.limit-outpost-spawns", pillagerLimitOutpostSpawns);
|
||||
}
|
||||
|
||||
+ public int pillagerLimitOutpostSpawns = 10;
|
||||
+ private void pillagerSettings() {
|
||||
+ pillagerLimitOutpostSpawns = getInt("mobs.pillager.limit-outpost-spawns", pillagerLimitOutpostSpawns);
|
||||
+ }
|
||||
+
|
||||
public float zombieHorseSpawnChance = 0F;
|
||||
private void zombieHorseSettings() {
|
||||
zombieHorseSpawnChance = (float) getDouble("mobs.zombie_horse.spawn-chance", zombieHorseSpawnChance);
|
||||
public boolean polarBearRidable = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
From d499ebe19055966a7138a8070538698b7b31397e Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Tue, 23 Jul 2019 08:28:21 -0500
|
||||
Subject: [PATCH] Implement configurable villager brain ticks
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityVillager.java | 6 ++++++
|
||||
src/main/java/net/pl3x/purpur/PurpurConfig.java | 7 +++++++
|
||||
2 files changed, 13 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java
|
||||
index d7f7a0b48..a0137c7af 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityVillager.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityVillager.java
|
||||
@@ -49,6 +49,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation
|
||||
}, MemoryModuleType.MEETING_POINT, (entityvillager, villageplacetype) -> {
|
||||
return villageplacetype == VillagePlaceType.r;
|
||||
});
|
||||
+ private final int brainTickOffset; // Purpur
|
||||
|
||||
public EntityVillager(EntityTypes<? extends EntityVillager> entitytypes, World world) {
|
||||
this(entitytypes, world, VillagerType.PLAINS);
|
||||
@@ -62,6 +63,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation
|
||||
this.setCanPickupLoot(true);
|
||||
this.setVillagerData(this.getVillagerData().withType(villagertype).withProfession(VillagerProfession.NONE));
|
||||
this.bo = this.a(new Dynamic(DynamicOpsNBT.a, new NBTTagCompound()));
|
||||
+ brainTickOffset = getRandom().nextInt(100); // Purpur
|
||||
}
|
||||
|
||||
// Purpur start
|
||||
@@ -148,6 +150,10 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation
|
||||
@Override
|
||||
protected void mobTick() {
|
||||
this.world.getMethodProfiler().enter("brain");
|
||||
+ // Purpur start
|
||||
+ boolean tick = (world.getTime() + brainTickOffset) % net.pl3x.purpur.PurpurConfig.villagerBrainTicks == 0;
|
||||
+ if (((WorldServer) world).getMinecraftServer().lagging ? tick : net.pl3x.purpur.PurpurConfig.useVillagerBrainTicksOnlyWhenLagging || tick)
|
||||
+ // Purpur end
|
||||
this.getBehaviorController().a((WorldServer) this.world, this); // CraftBukkit - decompile error
|
||||
this.world.getMethodProfiler().exit();
|
||||
if (!this.et() && this.bB > 0) {
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index de0cf5c55..c35d19f66 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -209,6 +209,13 @@ public class PurpurConfig {
|
||||
snowmanPumpkinPutBack = getBoolean("settings.mobs.snow_golem.pumpkin-can-be-added-back", snowmanPumpkinPutBack);
|
||||
}
|
||||
|
||||
+ public static boolean useVillagerBrainTicksOnlyWhenLagging = true;
|
||||
+ public static int villagerBrainTicks = 20;
|
||||
+ private static void villagerSettings() {
|
||||
+ useVillagerBrainTicksOnlyWhenLagging = getBoolean("settings.mobs.villager.use-brain-ticks-only-when-lagging", useVillagerBrainTicksOnlyWhenLagging);
|
||||
+ villagerBrainTicks = getInt("settings.mobs.villager.brain-ticks", villagerBrainTicks);
|
||||
+ }
|
||||
+
|
||||
public static boolean largeEnderChests = true;
|
||||
private static void largeEnderChests() {
|
||||
largeEnderChests = getBoolean("settings.large-ender-chests", largeEnderChests);
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From 95f806d67a4295c6baa09d577b61c0b03d088a8f Mon Sep 17 00:00:00 2001
|
||||
From a7f2d99791c0ee874e0af584f2f5057110113b0e Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
||||
Date: Thu, 16 Jan 2020 14:59:16 -0600
|
||||
Subject: [PATCH] Make the GUI better
|
||||
@@ -40,7 +40,7 @@ Subject: [PATCH] Make the GUI better
|
||||
create mode 100644 src/main/java/net/pl3x/purpur/util/HighlightErrorConverter.java
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java
|
||||
index d70c8cab2b..61ccb6079e 100644
|
||||
index d70c8cab2..61ccb6079 100644
|
||||
--- a/src/main/java/net/minecraft/server/DedicatedServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/DedicatedServer.java
|
||||
@@ -51,7 +51,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
|
||||
@@ -71,7 +71,7 @@ index d70c8cab2b..61ccb6079e 100644
|
||||
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index 9d5ef40a03..105ac8a040 100644
|
||||
index ac45dbf59..cfe3157f0 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -105,7 +105,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
@@ -83,7 +83,7 @@ index 9d5ef40a03..105ac8a040 100644
|
||||
@Nullable
|
||||
private KeyPair I;
|
||||
@Nullable
|
||||
@@ -1298,6 +1298,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
@@ -1291,6 +1291,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@ index 9d5ef40a03..105ac8a040 100644
|
||||
}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/gui/ServerGUI.java b/src/main/java/net/pl3x/purpur/gui/ServerGUI.java
|
||||
new file mode 100644
|
||||
index 0000000000..973b5efef5
|
||||
index 000000000..973b5efef
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/net/pl3x/purpur/gui/ServerGUI.java
|
||||
@@ -0,0 +1,123 @@
|
||||
@@ -222,7 +222,7 @@ index 0000000000..973b5efef5
|
||||
+}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/gui/console/JColorTextPane.java b/src/main/java/net/pl3x/purpur/gui/console/JColorTextPane.java
|
||||
new file mode 100644
|
||||
index 0000000000..55feec811f
|
||||
index 000000000..55feec811
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/net/pl3x/purpur/gui/console/JColorTextPane.java
|
||||
@@ -0,0 +1,81 @@
|
||||
@@ -309,7 +309,7 @@ index 0000000000..55feec811f
|
||||
+}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/gui/console/JConsolePanel.java b/src/main/java/net/pl3x/purpur/gui/console/JConsolePanel.java
|
||||
new file mode 100644
|
||||
index 0000000000..fb017a0708
|
||||
index 000000000..fb017a070
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/net/pl3x/purpur/gui/console/JConsolePanel.java
|
||||
@@ -0,0 +1,128 @@
|
||||
@@ -443,7 +443,7 @@ index 0000000000..fb017a0708
|
||||
+}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/gui/info/DetailsListSelectionModel.java b/src/main/java/net/pl3x/purpur/gui/info/DetailsListSelectionModel.java
|
||||
new file mode 100644
|
||||
index 0000000000..4e0b80fddb
|
||||
index 000000000..4e0b80fdd
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/net/pl3x/purpur/gui/info/DetailsListSelectionModel.java
|
||||
@@ -0,0 +1,21 @@
|
||||
@@ -470,7 +470,7 @@ index 0000000000..4e0b80fddb
|
||||
+}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/gui/info/JInfoPanel.java b/src/main/java/net/pl3x/purpur/gui/info/JInfoPanel.java
|
||||
new file mode 100644
|
||||
index 0000000000..a4983863cb
|
||||
index 000000000..a4983863c
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/net/pl3x/purpur/gui/info/JInfoPanel.java
|
||||
@@ -0,0 +1,42 @@
|
||||
@@ -518,7 +518,7 @@ index 0000000000..a4983863cb
|
||||
+}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/gui/info/RAMDetails.java b/src/main/java/net/pl3x/purpur/gui/info/RAMDetails.java
|
||||
new file mode 100644
|
||||
index 0000000000..00f79e4336
|
||||
index 000000000..00f79e433
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/net/pl3x/purpur/gui/info/RAMDetails.java
|
||||
@@ -0,0 +1,54 @@
|
||||
@@ -578,7 +578,7 @@ index 0000000000..00f79e4336
|
||||
+}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/gui/info/graph/GraphColor.java b/src/main/java/net/pl3x/purpur/gui/info/graph/GraphColor.java
|
||||
new file mode 100644
|
||||
index 0000000000..2fdb9bdd0d
|
||||
index 000000000..2fdb9bdd0
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/net/pl3x/purpur/gui/info/graph/GraphColor.java
|
||||
@@ -0,0 +1,44 @@
|
||||
@@ -628,7 +628,7 @@ index 0000000000..2fdb9bdd0d
|
||||
+}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/gui/info/graph/GraphData.java b/src/main/java/net/pl3x/purpur/gui/info/graph/GraphData.java
|
||||
new file mode 100644
|
||||
index 0000000000..85babad9cd
|
||||
index 000000000..85babad9c
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/net/pl3x/purpur/gui/info/graph/GraphData.java
|
||||
@@ -0,0 +1,47 @@
|
||||
@@ -681,7 +681,7 @@ index 0000000000..85babad9cd
|
||||
+}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/gui/info/graph/RAMGraph.java b/src/main/java/net/pl3x/purpur/gui/info/graph/RAMGraph.java
|
||||
new file mode 100644
|
||||
index 0000000000..f2f3dd2c16
|
||||
index 000000000..f2f3dd2c1
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/net/pl3x/purpur/gui/info/graph/RAMGraph.java
|
||||
@@ -0,0 +1,138 @@
|
||||
@@ -825,7 +825,7 @@ index 0000000000..f2f3dd2c16
|
||||
+}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/gui/playerlist/JPlayerList.java b/src/main/java/net/pl3x/purpur/gui/playerlist/JPlayerList.java
|
||||
new file mode 100644
|
||||
index 0000000000..17e75a2070
|
||||
index 000000000..17e75a207
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/net/pl3x/purpur/gui/playerlist/JPlayerList.java
|
||||
@@ -0,0 +1,57 @@
|
||||
@@ -888,7 +888,7 @@ index 0000000000..17e75a2070
|
||||
+}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/gui/playerlist/PlayerListCellRenderer.java b/src/main/java/net/pl3x/purpur/gui/playerlist/PlayerListCellRenderer.java
|
||||
new file mode 100644
|
||||
index 0000000000..2f02e9adc7
|
||||
index 000000000..2f02e9adc
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/net/pl3x/purpur/gui/playerlist/PlayerListCellRenderer.java
|
||||
@@ -0,0 +1,22 @@
|
||||
@@ -916,7 +916,7 @@ index 0000000000..2f02e9adc7
|
||||
+}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/gui/playerlist/PlayerListModel.java b/src/main/java/net/pl3x/purpur/gui/playerlist/PlayerListModel.java
|
||||
new file mode 100644
|
||||
index 0000000000..edbf454163
|
||||
index 000000000..edbf45416
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/net/pl3x/purpur/gui/playerlist/PlayerListModel.java
|
||||
@@ -0,0 +1,47 @@
|
||||
@@ -969,7 +969,7 @@ index 0000000000..edbf454163
|
||||
+}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/gui/playerlist/PlayerListMouseAdapter.java b/src/main/java/net/pl3x/purpur/gui/playerlist/PlayerListMouseAdapter.java
|
||||
new file mode 100644
|
||||
index 0000000000..13a5eb3ad3
|
||||
index 000000000..13a5eb3ad
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/net/pl3x/purpur/gui/playerlist/PlayerListMouseAdapter.java
|
||||
@@ -0,0 +1,32 @@
|
||||
@@ -1007,7 +1007,7 @@ index 0000000000..13a5eb3ad3
|
||||
+}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/gui/util/GUIColor.java b/src/main/java/net/pl3x/purpur/gui/util/GUIColor.java
|
||||
new file mode 100644
|
||||
index 0000000000..973c8ddf93
|
||||
index 000000000..973c8ddf9
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/net/pl3x/purpur/gui/util/GUIColor.java
|
||||
@@ -0,0 +1,54 @@
|
||||
@@ -1067,7 +1067,7 @@ index 0000000000..973c8ddf93
|
||||
+}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/util/HighlightErrorConverter.java b/src/main/java/net/pl3x/purpur/util/HighlightErrorConverter.java
|
||||
new file mode 100644
|
||||
index 0000000000..4b340b88a2
|
||||
index 000000000..4b340b88a
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/net/pl3x/purpur/util/HighlightErrorConverter.java
|
||||
@@ -0,0 +1,86 @@
|
||||
@@ -1158,7 +1158,7 @@ index 0000000000..4b340b88a2
|
||||
+
|
||||
+}
|
||||
diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml
|
||||
index a9bb987652..4be7613d0f 100644
|
||||
index a9bb98765..4be7613d0 100644
|
||||
--- a/src/main/resources/log4j2.xml
|
||||
+++ b/src/main/resources/log4j2.xml
|
||||
@@ -1,8 +1,17 @@
|
||||
@@ -1,4 +1,4 @@
|
||||
From 3a716b3f4749b7a960c083219e070a3cfdaf0c2b Mon Sep 17 00:00:00 2001
|
||||
From 48669d3223c83beb97b1f5320c2a90a55af22d0c Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sun, 21 Jul 2019 18:01:46 -0500
|
||||
Subject: [PATCH] Players should not cram to death
|
||||
@@ -8,7 +8,7 @@ Subject: [PATCH] Players should not cram to death
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
index 5e56e0e3e8..d72b45119d 100644
|
||||
index 670dcf282..b2dbeb0b0 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
@@ -1098,7 +1098,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
@@ -1,4 +1,4 @@
|
||||
From 9285ac973fec6e1944d6d751e08ae6c364bb6ba5 Mon Sep 17 00:00:00 2001
|
||||
From 92f64802ef183824cb3232e402b9744e080915aa Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
||||
Date: Sat, 11 Jan 2020 23:12:52 -0600
|
||||
Subject: [PATCH] Add EntityPortalReadyEvent
|
||||
@@ -86,10 +86,10 @@ index 2dc3ab4cf..1c0df77c2 100644
|
||||
break;
|
||||
// CraftBukkit start - add the block to our list
|
||||
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
||||
index d9963d1e4..1ea2120f0 100644
|
||||
index a2fe1a424..fc9d288de 100644
|
||||
--- a/src/main/java/net/minecraft/server/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/server/Entity.java
|
||||
@@ -171,9 +171,9 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
||||
@@ -168,9 +168,9 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
||||
protected boolean af; public final boolean inPortal() { return this.af; } // Paper - OBFHELPER
|
||||
protected int ag;
|
||||
public DimensionManager dimension;
|
||||
@@ -102,7 +102,7 @@ index d9963d1e4..1ea2120f0 100644
|
||||
private boolean invulnerable;
|
||||
protected UUID uniqueID;
|
||||
protected String am;
|
||||
@@ -2216,6 +2216,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
||||
@@ -2210,6 +2210,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
||||
this.world.getMethodProfiler().enter("portal");
|
||||
this.ag = i;
|
||||
this.portalCooldown = this.ba();
|
||||
@@ -141,7 +141,7 @@ index f84dd6d9b..f50e9670b 100644
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
|
||||
index 00343a9fb..4ca4bd259 100644
|
||||
index 567b297e0..456c835c8 100644
|
||||
--- a/src/main/java/net/minecraft/server/WorldServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/WorldServer.java
|
||||
@@ -65,7 +65,7 @@ public class WorldServer extends World {
|
||||
@@ -1,4 +1,4 @@
|
||||
From a52816cca0ca3cb8aa341675d4a23a4287b2bd3a Mon Sep 17 00:00:00 2001
|
||||
From 16be2ba8a75c8ab53bde44fe9ddbbc6149922e74 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Thu, 25 Jul 2019 18:07:37 -0500
|
||||
Subject: [PATCH] Implement elytra settings
|
||||
@@ -13,10 +13,10 @@ Subject: [PATCH] Implement elytra settings
|
||||
6 files changed, 49 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index 31cfac0c8..d4fb8e4a6 100644
|
||||
index 76a925f7a..d64e02628 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -2654,9 +2654,16 @@ public abstract class EntityLiving extends Entity {
|
||||
@@ -2645,9 +2645,16 @@ public abstract class EntityLiving extends Entity {
|
||||
if (itemstack.getItem() == Items.ELYTRA && ItemElytra.e(itemstack)) {
|
||||
flag = true;
|
||||
if (!this.world.isClientSide && (this.bm + 1) % 20 == 0) {
|
||||
@@ -56,7 +56,7 @@ index bd524a35b..c0e8cd0cd 100644
|
||||
itemstack.subtract(1);
|
||||
} else ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
|
||||
diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java
|
||||
index 1108aa085..2b39d5ca2 100644
|
||||
index 4fe503808..7b7a0a7cb 100644
|
||||
--- a/src/main/java/net/minecraft/server/ItemStack.java
|
||||
+++ b/src/main/java/net/minecraft/server/ItemStack.java
|
||||
@@ -401,7 +401,7 @@ public final class ItemStack {
|
||||
@@ -115,11 +115,11 @@ index 212af252b..fbc30e6ec 100644
|
||||
return this.x * this.x + this.y * this.y + this.z * this.z;
|
||||
}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 6cc6d8015..6d875b78b 100644
|
||||
index 246bb5128..272a5ae41 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -116,6 +116,19 @@ public class PurpurWorldConfig {
|
||||
milkCuresBadOmen = getBoolean("milk-cures-bad-omen", milkCuresBadOmen);
|
||||
@@ -150,6 +150,19 @@ public class PurpurWorldConfig {
|
||||
useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending);
|
||||
}
|
||||
|
||||
+ public int elytraDamagePerSecond = 1;
|
||||
@@ -128,16 +128,16 @@ index 6cc6d8015..6d875b78b 100644
|
||||
+ public int elytraDamagePerFireworkBoost = 0;
|
||||
+ public int elytraDamagePerTridentBoost = 0;
|
||||
+ private void elytraSettings() {
|
||||
+ elytraDamagePerSecond = getInt("elytra.damage-per-second", elytraDamagePerSecond);
|
||||
+ elytraDamageMultiplyBySpeed = getDouble("elytra.damage-multiplied-by-speed", elytraDamageMultiplyBySpeed);
|
||||
+ elytraIgnoreUnbreaking = getBoolean("elytra.ignore-unbreaking", elytraIgnoreUnbreaking);
|
||||
+ elytraDamagePerFireworkBoost = getInt("elytra.damage-per-boost.firework", elytraDamagePerFireworkBoost);
|
||||
+ elytraDamagePerTridentBoost = getInt("elytra.damage-per-boost.trident", elytraDamagePerTridentBoost);
|
||||
+ elytraDamagePerSecond = getInt("gameplay-mechanics.elytra.damage-per-second", elytraDamagePerSecond);
|
||||
+ elytraDamageMultiplyBySpeed = getDouble("gameplay-mechanics.elytra.damage-multiplied-by-speed", elytraDamageMultiplyBySpeed);
|
||||
+ elytraIgnoreUnbreaking = getBoolean("gameplay-mechanics.elytra.ignore-unbreaking", elytraIgnoreUnbreaking);
|
||||
+ elytraDamagePerFireworkBoost = getInt("gameplay-mechanics.elytra.damage-per-boost.firework", elytraDamagePerFireworkBoost);
|
||||
+ elytraDamagePerTridentBoost = getInt("gameplay-mechanics.elytra.damage-per-boost.trident", elytraDamagePerTridentBoost);
|
||||
+ }
|
||||
+
|
||||
public boolean enderDragonAlwaysDropsEggBlock = false;
|
||||
private void enderDragonSettings() {
|
||||
enderDragonAlwaysDropsEggBlock = getBoolean("mobs.ender-dragon.always-drop-egg-block", enderDragonAlwaysDropsEggBlock);
|
||||
public boolean idleTimeoutKick = true;
|
||||
public boolean idleTimeoutTickNearbyEntities = true;
|
||||
public boolean idleTimeoutCountAsSleeping = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
From 159989e47b1626c5837b62e1f0e644205ab90ada Mon Sep 17 00:00:00 2001
|
||||
From 155caf4cd63022a8e4e2a6e1651ccd9616fca731 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
||||
Date: Thu, 30 Jan 2020 00:41:24 -0600
|
||||
Subject: [PATCH] Add tick times API
|
||||
|
||||
---
|
||||
.../net/pl3x/purpur/gui/info/RAMDetails.java | 10 +---------
|
||||
.../org/bukkit/craftbukkit/CraftServer.java | 15 +++++++++++++++
|
||||
.../org/spigotmc/TicksPerSecondCommand.java | 18 +++++++++++++++++-
|
||||
3 files changed, 33 insertions(+), 10 deletions(-)
|
||||
.../java/net/pl3x/purpur/gui/info/RAMDetails.java | 4 ++--
|
||||
.../java/org/bukkit/craftbukkit/CraftServer.java | 12 ++++++++++++
|
||||
.../java/org/spigotmc/TicksPerSecondCommand.java | 10 ++++++++++
|
||||
3 files changed, 24 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/pl3x/purpur/gui/info/RAMDetails.java b/src/main/java/net/pl3x/purpur/gui/info/RAMDetails.java
|
||||
index 00f79e433..9fe2550a4 100644
|
||||
index 00f79e433..845eb1f8c 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/gui/info/RAMDetails.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/gui/info/RAMDetails.java
|
||||
@@ -15,7 +15,7 @@ import java.util.Locale;
|
||||
@@ -22,28 +22,25 @@ index 00f79e433..9fe2550a4 100644
|
||||
-> format.setDecimalFormatSymbols(DecimalFormatSymbols.getInstance(Locale.ROOT)));
|
||||
|
||||
public RAMDetails() {
|
||||
@@ -43,12 +43,4 @@ public class RAMDetails extends JList<String> {
|
||||
vector.add("Avg tick: " + DECIMAL_FORMAT.format(Bukkit.getAverageTickTime()) + " ms");
|
||||
@@ -44,7 +44,7 @@ public class RAMDetails extends JList<String> {
|
||||
setListData(vector);
|
||||
}
|
||||
-
|
||||
|
||||
- private double getAverage(long[] values) {
|
||||
- long total = 0L;
|
||||
- for (long value : values) {
|
||||
- total += value;
|
||||
- }
|
||||
- return (double) total / (double) values.length;
|
||||
- }
|
||||
}
|
||||
+ public static double getAverage(long[] values) {
|
||||
long total = 0L;
|
||||
for (long value : values) {
|
||||
total += value;
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
index fb0da17ed..bfc41f998 100644
|
||||
index daa94187f..ca7cc3b87 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -2201,5 +2201,20 @@ public final class CraftServer implements Server {
|
||||
public boolean isLagging() {
|
||||
return getServer().lagging;
|
||||
@@ -2189,4 +2189,16 @@ public final class CraftServer implements Server {
|
||||
return net.minecraft.server.MinecraftServer.currentTick;
|
||||
}
|
||||
// Paper end
|
||||
+
|
||||
+ // Purpur start
|
||||
+ @Override
|
||||
+ public long[] getTickTimes() {
|
||||
+ return getServer().getTickTimes();
|
||||
@@ -51,43 +48,22 @@ index fb0da17ed..bfc41f998 100644
|
||||
+
|
||||
+ @Override
|
||||
+ public double getAverageTickTime() {
|
||||
+ long total = 0L;
|
||||
+ long[] tickTimes = getTickTimes();
|
||||
+ for (long value : tickTimes) {
|
||||
+ total += value;
|
||||
+ }
|
||||
+ return ((double) total / (double) tickTimes.length) * 1.0E-6D;
|
||||
+ return net.pl3x.purpur.gui.info.RAMDetails.getAverage(getTickTimes());
|
||||
+ }
|
||||
// Purpur end
|
||||
+ // Purpur end
|
||||
}
|
||||
diff --git a/src/main/java/org/spigotmc/TicksPerSecondCommand.java b/src/main/java/org/spigotmc/TicksPerSecondCommand.java
|
||||
index 2eed9d0a4..c29380e1c 100644
|
||||
index 6d21c3269..5550379a6 100644
|
||||
--- a/src/main/java/org/spigotmc/TicksPerSecondCommand.java
|
||||
+++ b/src/main/java/org/spigotmc/TicksPerSecondCommand.java
|
||||
@@ -4,6 +4,12 @@ import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
+// Purpur start
|
||||
+import net.pl3x.purpur.gui.info.RAMDetails;
|
||||
+import org.apache.commons.lang.StringUtils;
|
||||
+import org.bukkit.Bukkit;
|
||||
+// Purpur end
|
||||
+
|
||||
public class TicksPerSecondCommand extends Command
|
||||
{
|
||||
|
||||
@@ -30,12 +36,22 @@ public class TicksPerSecondCommand extends Command
|
||||
for ( int i = 0; i < tps.length; i++) {
|
||||
tpsAvg[i] = format( tps[i] );
|
||||
@@ -32,10 +32,20 @@ public class TicksPerSecondCommand extends Command
|
||||
}
|
||||
- sender.sendMessage( ChatColor.GOLD + "TPS from last 5s, 1m, 5m, 15m: " + org.apache.commons.lang.StringUtils.join(tpsAvg, ", ")); // Purpur
|
||||
+ // Purpur start
|
||||
+ double avg = Bukkit.getAverageTickTime();
|
||||
+ sender.sendMessage( ChatColor.GOLD + "TPS from last 5s, 1m, 5m, 15m: " + StringUtils.join(tpsAvg, ", "));
|
||||
+ sender.sendMessage( ChatColor.GOLD + "Average tick time: " + getColor(avg) + RAMDetails.DECIMAL_FORMAT.format(avg) + " ms");
|
||||
+ // Purpur end
|
||||
sender.sendMessage( ChatColor.GOLD + "TPS from last 1m, 5m, 15m: " + org.apache.commons.lang.StringUtils.join(tpsAvg, ", "));
|
||||
// Paper end
|
||||
+ // Purpur start
|
||||
+ double avg = org.bukkit.Bukkit.getAverageTickTime();
|
||||
+ sender.sendMessage( ChatColor.GOLD + "Average tick time: " + getColor(avg) + net.pl3x.purpur.gui.info.RAMDetails.DECIMAL_FORMAT.format(avg) + " ms");
|
||||
+ // Purpur end
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
From 743e226dce9e746bd2d0358ed10d487ca53a537b Mon Sep 17 00:00:00 2001
|
||||
From 023207c11cc581bc3e6761ac56d0bb809355c2d9 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Thu, 1 Aug 2019 19:15:12 -0500
|
||||
Subject: [PATCH] Add blacklist option for grindstone
|
||||
@@ -6,11 +6,11 @@ Subject: [PATCH] Add blacklist option for grindstone
|
||||
---
|
||||
.../minecraft/server/ContainerGrindstone.java | 17 +++++++++++++++++
|
||||
.../java/net/minecraft/server/ItemStack.java | 6 ++++++
|
||||
src/main/java/net/pl3x/purpur/PurpurConfig.java | 12 ++++++++++++
|
||||
.../java/net/pl3x/purpur/PurpurWorldConfig.java | 12 ++++++++++++
|
||||
3 files changed, 35 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ContainerGrindstone.java b/src/main/java/net/minecraft/server/ContainerGrindstone.java
|
||||
index ed88e208d..0a5abd2e1 100644
|
||||
index ed88e208d..fcfb4abdc 100644
|
||||
--- a/src/main/java/net/minecraft/server/ContainerGrindstone.java
|
||||
+++ b/src/main/java/net/minecraft/server/ContainerGrindstone.java
|
||||
@@ -57,12 +57,24 @@ public class ContainerGrindstone extends Container {
|
||||
@@ -18,7 +18,7 @@ index ed88e208d..0a5abd2e1 100644
|
||||
@Override
|
||||
public boolean isAllowed(ItemStack itemstack) {
|
||||
+ // Purpur start
|
||||
+ if (net.pl3x.purpur.PurpurConfig.grindstoneBlacklistDisallowPlacement && net.pl3x.purpur.PurpurConfig.grindstoneBlacklist.contains(itemstack.getId())) {
|
||||
+ if (containeraccess.getWorld().purpurConfig.grindstoneBlacklistDisallowPlacement && containeraccess.getWorld().purpurConfig.grindstoneBlacklist.contains(itemstack.getId())) {
|
||||
+ getBukkitView().getTopInventory().getViewers().forEach(viewer -> ((Player) viewer).updateInventory());
|
||||
+ return false;
|
||||
+ }
|
||||
@@ -30,7 +30,7 @@ index ed88e208d..0a5abd2e1 100644
|
||||
@Override
|
||||
public boolean isAllowed(ItemStack itemstack) {
|
||||
+ // Purpur start
|
||||
+ if (net.pl3x.purpur.PurpurConfig.grindstoneBlacklistDisallowPlacement && net.pl3x.purpur.PurpurConfig.grindstoneBlacklist.contains(itemstack.getId())) {
|
||||
+ if (containeraccess.getWorld().purpurConfig.grindstoneBlacklistDisallowPlacement && containeraccess.getWorld().purpurConfig.grindstoneBlacklist.contains(itemstack.getId())) {
|
||||
+ getBukkitView().getTopInventory().getViewers().forEach(viewer -> ((Player) viewer).updateInventory());
|
||||
+ return false;
|
||||
+ }
|
||||
@@ -43,7 +43,7 @@ index ed88e208d..0a5abd2e1 100644
|
||||
|
||||
private int e(ItemStack itemstack) {
|
||||
+ // Purpur start
|
||||
+ if (net.pl3x.purpur.PurpurConfig.grindstoneBlacklistReturnsZeroExp && net.pl3x.purpur.PurpurConfig.grindstoneBlacklist.contains(itemstack.getId())) {
|
||||
+ if (containeraccess.getWorld().purpurConfig.grindstoneBlacklistReturnsZeroExp && containeraccess.getWorld().purpurConfig.grindstoneBlacklist.contains(itemstack.getId())) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
@@ -51,7 +51,7 @@ index ed88e208d..0a5abd2e1 100644
|
||||
Map<Enchantment, Integer> map = EnchantmentManager.a(itemstack);
|
||||
Iterator iterator = map.entrySet().iterator();
|
||||
diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java
|
||||
index 2b39d5ca2..e9801022e 100644
|
||||
index 7b7a0a7cb..6b45bc17c 100644
|
||||
--- a/src/main/java/net/minecraft/server/ItemStack.java
|
||||
+++ b/src/main/java/net/minecraft/server/ItemStack.java
|
||||
@@ -541,6 +541,12 @@ public final class ItemStack {
|
||||
@@ -67,36 +67,36 @@ index 2b39d5ca2..e9801022e 100644
|
||||
public String j() {
|
||||
return this.getItem().f(this);
|
||||
}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index 7d3c5e176..73b0eec5a 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.pl3x.purpur;
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 272a5ae41..cd3606a65 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -8,6 +8,7 @@ import net.minecraft.server.MinecraftKey;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.spigotmc.SpigotWorldConfig;
|
||||
|
||||
import com.google.common.base.Throwables;
|
||||
+import com.google.common.collect.Lists;
|
||||
import net.minecraft.server.Block;
|
||||
import net.minecraft.server.IRegistry;
|
||||
import net.minecraft.server.MinecraftKey;
|
||||
@@ -171,6 +172,17 @@ public class PurpurConfig {
|
||||
updatePermissionsOnWorldChange = getBoolean("settings.update-perms-on-world-change", updatePermissionsOnWorldChange);
|
||||
+import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -102,6 +103,17 @@ public class PurpurWorldConfig {
|
||||
farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow);
|
||||
}
|
||||
|
||||
+ public static boolean grindstoneBlacklistDisallowPlacement = true;
|
||||
+ public static boolean grindstoneBlacklistReturnsZeroExp = true;
|
||||
+ public static List<String> grindstoneBlacklist = Lists.newArrayList("minecraft:tripwire_hook");
|
||||
+ private static void grindstoneBlacklist() {
|
||||
+ grindstoneBlacklistDisallowPlacement = getBoolean("settings.grindstone.disallow-placement", grindstoneBlacklistDisallowPlacement);
|
||||
+ grindstoneBlacklistReturnsZeroExp = getBoolean("settings.grindstone.returns-zero-exp", grindstoneBlacklistReturnsZeroExp);
|
||||
+ List<String> blacklist = getList("settings.grindstone.blacklisted-items", grindstoneBlacklist);
|
||||
+ public List<String> grindstoneBlacklist = new ArrayList<>();
|
||||
+ public boolean grindstoneBlacklistDisallowPlacement = true;
|
||||
+ public boolean grindstoneBlacklistReturnsZeroExp = true;
|
||||
+ private void grindstoneBlacklist() {
|
||||
+ List<String> blacklist = getList("blocks.grindstone.blacklist.blacklisted-items", grindstoneBlacklist);
|
||||
+ grindstoneBlacklistDisallowPlacement = getBoolean("blocks.grindstone.blacklist.disallow-placement", grindstoneBlacklistDisallowPlacement);
|
||||
+ grindstoneBlacklistReturnsZeroExp = getBoolean("blocks.grindstone.blacklist.returns-zero-exp", grindstoneBlacklistReturnsZeroExp);
|
||||
+ grindstoneBlacklist.clear();
|
||||
+ grindstoneBlacklist.addAll(blacklist);
|
||||
+ }
|
||||
+
|
||||
public static boolean requireShiftToMount = true;
|
||||
private static void requireShiftToMount() {
|
||||
requireShiftToMount = getBoolean("settings.mobs.require-shift-to-mount", requireShiftToMount);
|
||||
public boolean signAllowColors = false;
|
||||
public boolean signRightClickEdit = false;
|
||||
private void signSettings() {
|
||||
--
|
||||
2.24.0.rc1
|
||||
2.24.0
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From 83c9bffd28b0101a5d15a3dc062ecabd82fea865 Mon Sep 17 00:00:00 2001
|
||||
From 150bf46cc0a227cd9d96aa4935fe7619ee7b2c9e Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Tue, 23 Jul 2019 10:07:16 -0500
|
||||
Subject: [PATCH] Implement lagging threshold
|
||||
@@ -10,7 +10,7 @@ Subject: [PATCH] Implement lagging threshold
|
||||
3 files changed, 12 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index ac45dbf59..587bef915 100644
|
||||
index cfe3157f0..39ed2ed61 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -178,6 +178,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
@@ -21,20 +21,20 @@ index ac45dbf59..587bef915 100644
|
||||
public final SlackActivityAccountant slackActivityAccountant = new SlackActivityAccountant();
|
||||
// Spigot end
|
||||
|
||||
@@ -916,6 +917,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
recentTps[0] = tps1.getAverage();
|
||||
@@ -917,6 +918,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
recentTps[1] = tps5.getAverage();
|
||||
recentTps[2] = tps15.getAverage();
|
||||
+ lagging = recentTps[0] < net.pl3x.purpur.PurpurConfig.laggingThreshold; // Purpur
|
||||
// Paper end
|
||||
+ lagging = recentTps[0] < net.pl3x.purpur.PurpurConfig.laggingThreshold; // Purpur
|
||||
tickSection = curTime;
|
||||
}
|
||||
// Spigot end
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index 627177731..de0cf5c55 100644
|
||||
index e791c52a4..2c7791cf6 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -136,6 +136,11 @@ public class PurpurConfig {
|
||||
return config.getString(path, config.getString(path));
|
||||
@@ -140,6 +140,11 @@ public class PurpurConfig {
|
||||
loggerSuppressWorldGenFeatureDeserializationError = getBoolean("settings.logger.suppress-world-gen-feature-deserialization-errors", loggerSuppressWorldGenFeatureDeserializationError);
|
||||
}
|
||||
|
||||
+ public static double laggingThreshold = 19.0D;
|
||||
@@ -42,16 +42,16 @@ index 627177731..de0cf5c55 100644
|
||||
+ laggingThreshold = getDouble("settings.lagging-threshold", laggingThreshold);
|
||||
+ }
|
||||
+
|
||||
public static boolean disableDropsOnCrammingDeath = true;
|
||||
private static void disableDropsOnCrammingDeath() {
|
||||
disableDropsOnCrammingDeath = getBoolean("settings.disable-drops-on-cramming-death", disableDropsOnCrammingDeath);
|
||||
public static int packetRateLimit = 250; // per second
|
||||
public static double packetRateLimitInterval = 10.0; // seconds
|
||||
public static String packetRateLimitKickMessage = "Sent too many packets";
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
index 4c83b4931..5d324a949 100644
|
||||
index ca7cc3b87..0806e87cd 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -2195,5 +2195,10 @@ public final class CraftServer implements Server {
|
||||
public String getServerName() {
|
||||
return getProperties().serverName;
|
||||
@@ -2200,5 +2200,10 @@ public final class CraftServer implements Server {
|
||||
public double getAverageTickTime() {
|
||||
return net.pl3x.purpur.gui.info.RAMDetails.getAverage(getTickTimes());
|
||||
}
|
||||
+
|
||||
+ @Override
|
||||
@@ -1,24 +0,0 @@
|
||||
From 1ab6786f1a7c38e228214f8c10e02a6376329b1e Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sun, 11 Aug 2019 22:25:33 -0500
|
||||
Subject: [PATCH] Advancement stuffs
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/CriterionTrigger.java | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/CriterionTrigger.java b/src/main/java/net/minecraft/server/CriterionTrigger.java
|
||||
index 4fe7324475..6e5d81daf1 100644
|
||||
--- a/src/main/java/net/minecraft/server/CriterionTrigger.java
|
||||
+++ b/src/main/java/net/minecraft/server/CriterionTrigger.java
|
||||
@@ -27,6 +27,7 @@ public interface CriterionTrigger<T extends CriterionInstance> {
|
||||
this.c = s;
|
||||
}
|
||||
|
||||
+ public T getInstance() { return a(); } // Purpur - OBFHELPER
|
||||
public T a() {
|
||||
return this.a;
|
||||
}
|
||||
--
|
||||
2.24.0.rc1
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
From 005e84d778ce593bdd5c28bbf5be508439583951 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Tue, 23 Jul 2019 08:28:21 -0500
|
||||
Subject: [PATCH] Implement configurable villager brain ticks
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityVillager.java | 6 ++++++
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 4 ++++
|
||||
2 files changed, 10 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java
|
||||
index 3eaac031f..65cd5f53c 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityVillager.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityVillager.java
|
||||
@@ -53,6 +53,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation
|
||||
}, MemoryModuleType.MEETING_POINT, (entityvillager, villageplacetype) -> {
|
||||
return villageplacetype == VillagePlaceType.r;
|
||||
});
|
||||
+ private final int brainTickOffset; // Purpur
|
||||
|
||||
public EntityVillager(EntityTypes<? extends EntityVillager> entitytypes, World world) {
|
||||
this(entitytypes, world, VillagerType.PLAINS);
|
||||
@@ -66,6 +67,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation
|
||||
this.setCanPickupLoot(true);
|
||||
this.setVillagerData(this.getVillagerData().withType(villagertype).withProfession(VillagerProfession.NONE));
|
||||
this.bo = this.a(new Dynamic(DynamicOpsNBT.a, new NBTTagCompound()));
|
||||
+ brainTickOffset = getRandom().nextInt(100); // Purpur
|
||||
}
|
||||
|
||||
// Purpur start
|
||||
@@ -167,6 +169,10 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation
|
||||
@Override
|
||||
protected void mobTick() {
|
||||
this.world.getMethodProfiler().enter("brain");
|
||||
+ // Purpur start
|
||||
+ boolean tick = (world.getTime() + brainTickOffset) % world.purpurConfig.villagerBrainTicks == 0;
|
||||
+ if (((WorldServer) world).getMinecraftServer().lagging ? tick : world.purpurConfig.villagerUseBrainTicksOnlyWhenLagging || tick)
|
||||
+ // Purpur end
|
||||
this.getBehaviorController().a((WorldServer) this.world, this); // CraftBukkit - decompile error
|
||||
this.world.getMethodProfiler().exit();
|
||||
if (!this.et() && this.bB > 0) {
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index cd3606a65..39c56149a 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -739,10 +739,14 @@ public class PurpurWorldConfig {
|
||||
public boolean villagerRidable = false;
|
||||
public boolean villagerRidableInWater = false;
|
||||
public boolean villagerRequireShiftToMount = true;
|
||||
+ public int villagerBrainTicks = 1;
|
||||
+ public boolean villagerUseBrainTicksOnlyWhenLagging = true;
|
||||
private void villagerSettings() {
|
||||
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
|
||||
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
|
||||
villagerRequireShiftToMount = getBoolean("mobs.villager.require-shift-to-mount", villagerRequireShiftToMount);
|
||||
+ villagerBrainTicks = getInt("mobs.villager.brain-ticks", villagerBrainTicks);
|
||||
+ villagerUseBrainTicksOnlyWhenLagging = getBoolean("mobs.villager.use-brain-ticks-only-when-lagging", villagerUseBrainTicksOnlyWhenLagging);
|
||||
}
|
||||
|
||||
public boolean villagerTraderRidable = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,42 +1,43 @@
|
||||
From 870cab93964729a680ca7ae59e8c9661f332ee71 Mon Sep 17 00:00:00 2001
|
||||
From dc6745d6610beb00f366080393e08a022c278487 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 17 Aug 2019 15:27:09 -0500
|
||||
Subject: [PATCH] Add option for zombies targetting turtle eggs
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityZombie.java | 2 +-
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 5 +++++
|
||||
2 files changed, 6 insertions(+), 1 deletion(-)
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 2 ++
|
||||
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityZombie.java b/src/main/java/net/minecraft/server/EntityZombie.java
|
||||
index 8f9d252c1e..e9da244d98 100644
|
||||
index e9e2be88e..1e60cc399 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityZombie.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityZombie.java
|
||||
@@ -48,7 +48,7 @@ public class EntityZombie extends EntityMonster {
|
||||
@@ -64,7 +64,7 @@ public class EntityZombie extends EntityMonster {
|
||||
@Override
|
||||
protected void initPathfinder() {
|
||||
this.goalSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
|
||||
- this.goalSelector.a(4, new EntityZombie.a(this, 1.0D, 3));
|
||||
+ if (world.purpurConfig.zombieTargetsTurtleEggs)this.goalSelector.a(4, new EntityZombie.a(this, 1.0D, 3)); // Purpur
|
||||
+ if (world.purpurConfig.zombieTargetTurtleEggs) this.goalSelector.a(4, new EntityZombie.a(this, 1.0D, 3)); // Purpur
|
||||
this.goalSelector.a(8, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 8.0F));
|
||||
this.goalSelector.a(8, new PathfinderGoalRandomLookaround(this));
|
||||
this.l();
|
||||
this.targetSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 7422f361e4..4072aac8e4 100644
|
||||
index 39c56149a..1ab98d49e 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -171,6 +171,11 @@ public class PurpurWorldConfig {
|
||||
villagerSpawnIronGolemLimit = getInt("mobs.villager.spawn-iron-golem.limit", villagerSpawnIronGolemLimit);
|
||||
@@ -808,10 +808,12 @@ public class PurpurWorldConfig {
|
||||
public boolean zombieRidable = false;
|
||||
public boolean zombieRidableInWater = false;
|
||||
public boolean zombieRequireShiftToMount = true;
|
||||
+ public boolean zombieTargetTurtleEggs = true;
|
||||
private void zombieSettings() {
|
||||
zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable);
|
||||
zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater);
|
||||
zombieRequireShiftToMount = getBoolean("mobs.zombie.require-shift-to-mount", zombieRequireShiftToMount);
|
||||
+ zombieTargetTurtleEggs = getBoolean("mobs.zombie.target-turtle-eggs", zombieTargetTurtleEggs);
|
||||
}
|
||||
|
||||
+ public boolean zombieTargetsTurtleEggs = true;
|
||||
+ private void zombieSettings() {
|
||||
+ zombieTargetsTurtleEggs = getBoolean("mobs.zombie.target-turtle-eggs", zombieTargetsTurtleEggs);
|
||||
+ }
|
||||
+
|
||||
public float zombieHorseSpawnChance = 0F;
|
||||
private void zombieHorseSettings() {
|
||||
zombieHorseSpawnChance = (float) getDouble("mobs.zombie_horse.spawn-chance", zombieHorseSpawnChance);
|
||||
public boolean zombieHorseCanSwim = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
|
||||
@@ -1,17 +1,26 @@
|
||||
From 93184f0c69419be53e1cf8107e683b3f0196b361 Mon Sep 17 00:00:00 2001
|
||||
From b441c9feb8ef604372f997136ea9b7031e086bfa Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Fri, 23 Aug 2019 20:57:29 -0500
|
||||
Subject: [PATCH] Implement bamboo growth settings
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/BlockBamboo.java | 12 ++++++------
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 7 +++++++
|
||||
2 files changed, 13 insertions(+), 6 deletions(-)
|
||||
.../java/net/minecraft/server/BlockBamboo.java | 14 +++++++-------
|
||||
.../java/net/pl3x/purpur/PurpurWorldConfig.java | 7 +++++++
|
||||
2 files changed, 14 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockBamboo.java b/src/main/java/net/minecraft/server/BlockBamboo.java
|
||||
index 02c548dd9c..e4693fb27d 100644
|
||||
index 02c548dd9..016ceebb9 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockBamboo.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockBamboo.java
|
||||
@@ -10,7 +10,7 @@ public class BlockBamboo extends Block implements IBlockFragilePlantElement {
|
||||
protected static final VoxelShape c = Block.a(6.5D, 0.0D, 6.5D, 9.5D, 16.0D, 9.5D);
|
||||
public static final BlockStateInteger d = BlockProperties.Y;
|
||||
public static final BlockStateEnum<BlockPropertyBambooSize> e = BlockProperties.aG;
|
||||
- public static final BlockStateInteger f = BlockProperties.au;
|
||||
+ public static final BlockStateInteger f = BlockProperties.au; private BlockStateInteger stage() { return f; } // Purpur - OBFHELPER
|
||||
|
||||
public BlockBamboo(Block.Info block_info) {
|
||||
super(block_info);
|
||||
@@ -89,7 +89,7 @@ public class BlockBamboo extends Block implements IBlockFragilePlantElement {
|
||||
if (random.nextInt(Math.max(1, (int) (100.0F / worldserver.spigotConfig.bambooModifier) * 3)) == 0 && worldserver.isEmpty(blockposition.up()) && worldserver.getLightLevel(blockposition.up(), 0) >= 9) { // Spigot
|
||||
int i = this.b(worldserver, blockposition) + 1;
|
||||
@@ -26,7 +35,7 @@ index 02c548dd9c..e4693fb27d 100644
|
||||
int j = this.b(iblockaccess, blockposition);
|
||||
|
||||
- return i + j + 1 < 16 && (Integer) iblockaccess.getType(blockposition.up(i)).get(BlockBamboo.f) != 1;
|
||||
+ return i + j + 1 < ((World) iblockaccess).purpurConfig.bambooMaxHeight && (Integer) iblockaccess.getType(blockposition.up(i)).get(BlockBamboo.f) != 1; // Purpur
|
||||
+ return i + j + 1 < ((World) iblockaccess).purpurConfig.bambooMaxHeight && iblockaccess.getType(blockposition.up(i)).get(stage()) != 1; // Purpur
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -35,7 +44,7 @@ index 02c548dd9c..e4693fb27d 100644
|
||||
IBlockData iblockdata1 = worldserver.getType(blockposition1);
|
||||
|
||||
- if (k >= 16 || (Integer) iblockdata1.get(BlockBamboo.f) == 1 || !worldserver.isEmpty(blockposition1.up())) {
|
||||
+ if (k >= worldserver.purpurConfig.bambooMaxHeight || (Integer) iblockdata1.get(BlockBamboo.f) == 1 || !worldserver.isEmpty(blockposition1.up())) { // Purpur
|
||||
+ if (k >= worldserver.purpurConfig.bambooMaxHeight || iblockdata1.get(stage()) == 1 || !worldserver.isEmpty(blockposition1.up())) { // Purpur
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -67,23 +76,23 @@ index 02c548dd9c..e4693fb27d 100644
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 4072aac8e4..c6ff074b14 100644
|
||||
index 1ab98d49e..0f2d5a043 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -63,6 +63,13 @@ public class PurpurWorldConfig {
|
||||
editableSigns = getBoolean("editable-signs", editableSigns);
|
||||
@@ -71,6 +71,13 @@ public class PurpurWorldConfig {
|
||||
return PurpurConfig.config.getString("world-settings." + worldName + "." + path, PurpurConfig.config.getString("world-settings.default." + path));
|
||||
}
|
||||
|
||||
+ public int bambooMaxHeight = 16;
|
||||
+ public int bambooSmallHeight = 10;
|
||||
+ private void bambooSettings() {
|
||||
+ bambooMaxHeight = getInt("bamboo.max-height", bambooMaxHeight);
|
||||
+ bambooSmallHeight = getInt("bamboo.small-height", bambooSmallHeight);
|
||||
+ bambooMaxHeight = getInt("blocks.bamboo.max-height", bambooMaxHeight);
|
||||
+ bambooSmallHeight = getInt("blocks.bamboo.small-height", bambooSmallHeight);
|
||||
+ }
|
||||
+
|
||||
public boolean campfireObeysGravity = true;
|
||||
private void campfireObeysGravity() {
|
||||
campfireObeysGravity = getBoolean("campfire-obeys-gravity", campfireObeysGravity);
|
||||
public int campfireRegenInterval = 0;
|
||||
public int campfireRegenDuration = 80;
|
||||
public int campfireRegenRange = 5;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
From 62f9b4c2a2a6b774754aaa30a8949001b3a57586 Mon Sep 17 00:00:00 2001
|
||||
From 012a9451e731df4d43d74a8547f410d7fb47e495 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sun, 21 Jul 2019 18:06:20 -0500
|
||||
Subject: [PATCH] Ladders should not bypass cramming gamerule
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/Entity.java | 4 ++++
|
||||
src/main/java/net/minecraft/server/Entity.java | 6 ++++++
|
||||
src/main/java/net/minecraft/server/EntityArmorStand.java | 2 +-
|
||||
src/main/java/net/minecraft/server/EntityBat.java | 2 +-
|
||||
src/main/java/net/minecraft/server/EntityBoat.java | 2 +-
|
||||
@@ -12,22 +12,24 @@ Subject: [PATCH] Ladders should not bypass cramming gamerule
|
||||
src/main/java/net/minecraft/server/EntityLiving.java | 8 +++++---
|
||||
.../java/net/minecraft/server/EntityMinecartAbstract.java | 2 +-
|
||||
src/main/java/net/minecraft/server/EntityParrot.java | 2 +-
|
||||
src/main/java/net/minecraft/server/IEntitySelector.java | 7 ++++++-
|
||||
src/main/java/net/pl3x/purpur/PurpurConfig.java | 5 +++++
|
||||
10 files changed, 26 insertions(+), 10 deletions(-)
|
||||
src/main/java/net/minecraft/server/IEntitySelector.java | 6 ++++++
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 2 ++
|
||||
10 files changed, 25 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
||||
index 2aa79391a..3be37a100 100644
|
||||
index fc9d288de..4ecfba81a 100644
|
||||
--- a/src/main/java/net/minecraft/server/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/server/Entity.java
|
||||
@@ -1509,6 +1509,10 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
||||
@@ -1508,6 +1508,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
||||
}
|
||||
|
||||
public boolean isCollidable() {
|
||||
+ // Purpur start
|
||||
+ return isCollidable(false);
|
||||
+ }
|
||||
+
|
||||
+ public boolean isCollidable(boolean ignoreClimbing) {
|
||||
+ // Purpur end
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -45,10 +47,10 @@ index 8ad131e4f..dfe8c57ce 100644
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityBat.java b/src/main/java/net/minecraft/server/EntityBat.java
|
||||
index b19028fa8..56bdaf0e0 100644
|
||||
index a6218158e..79f4b2aa0 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityBat.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityBat.java
|
||||
@@ -55,7 +55,7 @@ public class EntityBat extends EntityAmbient {
|
||||
@@ -73,7 +73,7 @@ public class EntityBat extends EntityAmbient {
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -71,10 +73,10 @@ index fdf306e80..563fc8ced 100644
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityHorseAbstract.java b/src/main/java/net/minecraft/server/EntityHorseAbstract.java
|
||||
index dcfbc2313..ba5805de5 100644
|
||||
index e7ba83f32..55e18e4c7 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityHorseAbstract.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityHorseAbstract.java
|
||||
@@ -173,7 +173,7 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven
|
||||
@@ -188,7 +188,7 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -84,19 +86,19 @@ index dcfbc2313..ba5805de5 100644
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index 38948133e..31cfac0c8 100644
|
||||
index d64e02628..cd4526039 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -2675,7 +2675,7 @@ public abstract class EntityLiving extends Entity {
|
||||
@@ -2673,7 +2673,7 @@ public abstract class EntityLiving extends Entity {
|
||||
protected void doTick() {}
|
||||
|
||||
protected void collideNearby() {
|
||||
- List<Entity> list = this.world.getEntities(this, this.getBoundingBox(), IEntitySelector.a(this));
|
||||
+ List<Entity> list = this.world.getEntities(this, this.getBoundingBox(), IEntitySelector.a(this, net.pl3x.purpur.PurpurConfig.fixLaddersBypassingCrammingRule)); // Purpur
|
||||
+ List<Entity> list = world.getEntities(this, getBoundingBox(), IEntitySelector.pushable(this, world.purpurConfig.fixClimbingBypassingCrammingRule)); // Purpur
|
||||
|
||||
if (!list.isEmpty()) {
|
||||
int i = this.world.getGameRules().getInt(GameRules.MAX_ENTITY_CRAMMING);
|
||||
@@ -2813,8 +2813,10 @@ public abstract class EntityLiving extends Entity {
|
||||
@@ -2811,8 +2811,10 @@ public abstract class EntityLiving extends Entity {
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -110,10 +112,10 @@ index 38948133e..31cfac0c8 100644
|
||||
|
||||
@Override
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityMinecartAbstract.java b/src/main/java/net/minecraft/server/EntityMinecartAbstract.java
|
||||
index 1b982a510..7ff7844d0 100644
|
||||
index 57288aa73..7d6554700 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityMinecartAbstract.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityMinecartAbstract.java
|
||||
@@ -106,7 +106,7 @@ public abstract class EntityMinecartAbstract extends Entity {
|
||||
@@ -105,7 +105,7 @@ public abstract class EntityMinecartAbstract extends Entity {
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -123,10 +125,10 @@ index 1b982a510..7ff7844d0 100644
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityParrot.java b/src/main/java/net/minecraft/server/EntityParrot.java
|
||||
index 976b3c127..2aa12d83c 100644
|
||||
index 95b786a5a..ee9282e94 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityParrot.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityParrot.java
|
||||
@@ -359,7 +359,7 @@ public class EntityParrot extends EntityPerchable implements EntityBird {
|
||||
@@ -380,7 +380,7 @@ public class EntityParrot extends EntityPerchable implements EntityBird {
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -136,43 +138,42 @@ index 976b3c127..2aa12d83c 100644
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/IEntitySelector.java b/src/main/java/net/minecraft/server/IEntitySelector.java
|
||||
index a2d1ef360..8d7273a38 100644
|
||||
index 4665671ef..037f14e01 100644
|
||||
--- a/src/main/java/net/minecraft/server/IEntitySelector.java
|
||||
+++ b/src/main/java/net/minecraft/server/IEntitySelector.java
|
||||
@@ -33,11 +33,16 @@ public final class IEntitySelector {
|
||||
@@ -36,6 +36,12 @@ public final class IEntitySelector {
|
||||
}
|
||||
|
||||
public static Predicate<Entity> a(Entity entity) {
|
||||
+ // Purpur start
|
||||
+ return a(entity, false);
|
||||
+ return pushable(entity, false);
|
||||
+ }
|
||||
+ public static Predicate<Entity> a(Entity entity, boolean ignoreClimbing) {
|
||||
+ // Purpur end
|
||||
+
|
||||
+ public static Predicate<Entity> pushable(Entity entity, boolean ignoreClimbing) {
|
||||
+ // Purpur end
|
||||
ScoreboardTeamBase scoreboardteambase = entity.getScoreboardTeam();
|
||||
ScoreboardTeamBase.EnumTeamPush scoreboardteambase_enumteampush = scoreboardteambase == null ? ScoreboardTeamBase.EnumTeamPush.ALWAYS : scoreboardteambase.getCollisionRule();
|
||||
|
||||
return (Predicate) (scoreboardteambase_enumteampush == ScoreboardTeamBase.EnumTeamPush.NEVER ? Predicates.alwaysFalse() : IEntitySelector.f.and((entity1) -> {
|
||||
- if (!entity1.isCollidable()) {
|
||||
+ if (!entity1.isCollidable(ignoreClimbing)) { // Purpur
|
||||
return false;
|
||||
} else if (entity.world.isClientSide && (!(entity1 instanceof EntityHuman) || !((EntityHuman) entity1).ec())) {
|
||||
return false;
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index 83112e6ec..627177731 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -146,6 +146,11 @@ public class PurpurConfig {
|
||||
dontSendUselessEntityPackets = getBoolean("settings.dont-send-useless-entity-packets", dontSendUselessEntityPackets);
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 0f2d5a043..5bfa0de24 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -144,6 +144,7 @@ public class PurpurWorldConfig {
|
||||
public double controllableMinecartsBaseSpeed = 0.1D;
|
||||
public Map<Block, Double> controllableMinecartsBlockSpeeds = new HashMap<>();
|
||||
public boolean disableDropsOnCrammingDeath = false;
|
||||
+ public boolean fixClimbingBypassingCrammingRule = false;
|
||||
public boolean milkCuresBadOmen = true;
|
||||
public boolean useBetterMending = false;
|
||||
private void gameplayMechanicsSettings() {
|
||||
@@ -165,6 +166,7 @@ public class PurpurWorldConfig {
|
||||
set("gameplay-mechanics.controllable-minecarts.block-speed.stone", 0.5D);
|
||||
}
|
||||
disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath);
|
||||
+ fixClimbingBypassingCrammingRule = getBoolean("gameplay-mechanics.fix-climbing-bypassing-cramming-rule", fixClimbingBypassingCrammingRule);
|
||||
milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen);
|
||||
useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending);
|
||||
}
|
||||
|
||||
+ public static boolean fixLaddersBypassingCrammingRule = true;
|
||||
+ private static void fixLaddersBypassingCrammingRule() {
|
||||
+ fixLaddersBypassingCrammingRule = getBoolean("settings.fix-ladders-bypassing-cramming-rule", fixLaddersBypassingCrammingRule);
|
||||
+ }
|
||||
+
|
||||
public static boolean fixItemPositionDesync = false;
|
||||
private static void fixItemPositionDesync() {
|
||||
fixItemPositionDesync = getBoolean("settings.fix-item-position-desync", fixItemPositionDesync);
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,35 +1,26 @@
|
||||
From 34a74b47613d54bec307dd0792344914f9081b11 Mon Sep 17 00:00:00 2001
|
||||
From 826ac5ed93a093fd77452390ede721dda12ee090 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Fri, 23 Aug 2019 21:56:31 -0500
|
||||
Subject: [PATCH] Option for slimes not pushable
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/BlockPiston.java | 12 ++++++++++++
|
||||
src/main/java/net/minecraft/server/BlockPiston.java | 10 ++++++++++
|
||||
src/main/java/net/minecraft/server/BlockSlime.java | 7 +++++++
|
||||
src/main/java/net/pl3x/purpur/PurpurConfig.java | 13 +++++++++++++
|
||||
3 files changed, 32 insertions(+)
|
||||
src/main/java/net/pl3x/purpur/PurpurConfig.java | 5 +++++
|
||||
3 files changed, 22 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockPiston.java b/src/main/java/net/minecraft/server/BlockPiston.java
|
||||
index b29525c40d..3a47df79f3 100644
|
||||
index b29525c40..1e72b3bbc 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockPiston.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockPiston.java
|
||||
@@ -10,6 +10,8 @@ import java.util.Map.Entry;
|
||||
// CraftBukkit start
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import java.util.AbstractList;
|
||||
+
|
||||
+import org.bukkit.Material;
|
||||
import org.bukkit.craftbukkit.block.CraftBlock;
|
||||
import org.bukkit.event.block.BlockPistonRetractEvent;
|
||||
import org.bukkit.event.block.BlockPistonExtendEvent;
|
||||
@@ -332,6 +334,16 @@ public class BlockPiston extends BlockDirectional {
|
||||
@@ -332,6 +332,16 @@ public class BlockPiston extends BlockDirectional {
|
||||
} else {
|
||||
event = new BlockPistonRetractEvent(bblock, blocks, CraftBlock.notchToBlockFace(enumdirection1));
|
||||
}
|
||||
+ // Purpur start
|
||||
+ if (net.pl3x.purpur.PurpurConfig.slimeBlocksNotPushable) {
|
||||
+ for (org.bukkit.block.Block block : blocks) {
|
||||
+ if (block.getType() == Material.SLIME_BLOCK) {
|
||||
+ if (block.getType() == org.bukkit.Material.SLIME_BLOCK) {
|
||||
+ event.setCancelled(true);
|
||||
+ break;
|
||||
+ }
|
||||
@@ -40,7 +31,7 @@ index b29525c40d..3a47df79f3 100644
|
||||
|
||||
if (event.isCancelled()) {
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockSlime.java b/src/main/java/net/minecraft/server/BlockSlime.java
|
||||
index 01f32659d9..52ab86f0b1 100644
|
||||
index 01f32659d..52ab86f0b 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockSlime.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockSlime.java
|
||||
@@ -49,4 +49,11 @@ public class BlockSlime extends BlockHalfTransparent {
|
||||
@@ -56,29 +47,19 @@ index 01f32659d9..52ab86f0b1 100644
|
||||
+ // Purpur end
|
||||
}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index 4f6ec93991..a511c83cca 100644
|
||||
index 2c7791cf6..b4cd05d18 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -245,6 +245,19 @@ public class PurpurConfig {
|
||||
InventoryType.BARREL.setDefaultSize(packedBarrels ? 54 : 27);
|
||||
@@ -163,4 +163,9 @@ public class PurpurConfig {
|
||||
dontSendUselessEntityPackets = getBoolean("settings.dont-send-useless-entity-packets", dontSendUselessEntityPackets);
|
||||
fixItemPositionDesync = getBoolean("settings.fix-item-position-desync", fixItemPositionDesync);
|
||||
}
|
||||
|
||||
+ public static boolean slimeBlocksNotPushable = false;
|
||||
+ private static void slimeBlocksNotPushable() {
|
||||
+ if (version < 2) {
|
||||
+ if (config.isSet("slimes-not-pushable")) {
|
||||
+ slimeBlocksNotPushable = config.getBoolean("slimes-not-pushable", slimeBlocksNotPushable);
|
||||
+ }
|
||||
+ if (config.isSet("settings.slimes-not-pushable")) {
|
||||
+ slimeBlocksNotPushable = config.getBoolean("settings.slimes-not-pushable", slimeBlocksNotPushable);
|
||||
+ }
|
||||
+ }
|
||||
+ slimeBlocksNotPushable = getBoolean("settings.slime-blocks-not-pushable", slimeBlocksNotPushable);
|
||||
+ }
|
||||
+
|
||||
public static boolean ridableBat = true;
|
||||
public static boolean ridableBee = true;
|
||||
public static boolean ridableBlaze = true;
|
||||
+ public static boolean slimeBlocksNotPushable = false;
|
||||
+ private static void blockSettings() {
|
||||
+ slimeBlocksNotPushable = getBoolean("settings.blocks.slime.not-movable-by-piston", slimeBlocksNotPushable);
|
||||
+ }
|
||||
}
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,41 +1,41 @@
|
||||
From bd5545c40e56edccbfcaf30ea8b28c6f9236fb83 Mon Sep 17 00:00:00 2001
|
||||
From 70dc3e709966424ed6aab1eff5e9f78ec450dc66 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sun, 26 May 2019 15:19:14 -0500
|
||||
Subject: [PATCH] Bring back server name
|
||||
|
||||
---
|
||||
.../net/minecraft/server/DedicatedServerProperties.java | 1 +
|
||||
src/main/java/org/bukkit/craftbukkit/CraftServer.java | 7 +++++++
|
||||
2 files changed, 8 insertions(+)
|
||||
.../java/net/minecraft/server/DedicatedServerProperties.java | 1 +
|
||||
src/main/java/org/bukkit/craftbukkit/CraftServer.java | 5 +++++
|
||||
2 files changed, 6 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/DedicatedServerProperties.java b/src/main/java/net/minecraft/server/DedicatedServerProperties.java
|
||||
index 0c3ec8357..20c143e31 100644
|
||||
index 0c3ec8357..309f5562b 100644
|
||||
--- a/src/main/java/net/minecraft/server/DedicatedServerProperties.java
|
||||
+++ b/src/main/java/net/minecraft/server/DedicatedServerProperties.java
|
||||
@@ -10,6 +10,7 @@ public class DedicatedServerProperties extends PropertyManager<DedicatedServerPr
|
||||
public final boolean onlineMode = this.getBoolean("online-mode", true);
|
||||
public final boolean preventProxyConnections = this.getBoolean("prevent-proxy-connections", false);
|
||||
public final String serverIp = this.getString("server-ip", "");
|
||||
+ public final String serverName = this.getString("server-name", "Unknown Server"); // Purpur - bring back server name
|
||||
+ public final String serverName = this.getString("server-name", "Unknown Server"); // Purpur
|
||||
public final boolean spawnAnimals = this.getBoolean("spawn-animals", true);
|
||||
public final boolean spawnNpcs = this.getBoolean("spawn-npcs", true);
|
||||
public final boolean pvp = this.getBoolean("pvp", true);
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
index daa94187f..4c83b4931 100644
|
||||
index 0806e87cd..fcfb2c1b0 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -2189,4 +2189,11 @@ public final class CraftServer implements Server {
|
||||
return net.minecraft.server.MinecraftServer.currentTick;
|
||||
}
|
||||
@@ -2191,6 +2191,11 @@ public final class CraftServer implements Server {
|
||||
// Paper end
|
||||
+
|
||||
+ // Purpur start - bring back server name
|
||||
|
||||
// Purpur start
|
||||
+ @Override
|
||||
+ public String getServerName() {
|
||||
+ return getProperties().serverName;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
}
|
||||
+
|
||||
@Override
|
||||
public long[] getTickTimes() {
|
||||
return getServer().getTickTimes();
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
From ac76a88f329371e598863969a945bb0a788dc423 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 31 Aug 2019 17:24:41 -0500
|
||||
Subject: [PATCH] Add killer rabbit natural spawn chance
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityRabbit.java | 2 ++
|
||||
src/main/java/net/pl3x/purpur/PurpurConfig.java | 5 +++++
|
||||
2 files changed, 7 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityRabbit.java b/src/main/java/net/minecraft/server/EntityRabbit.java
|
||||
index 0eae51aa6..d2f5e4e0f 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityRabbit.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityRabbit.java
|
||||
@@ -369,6 +369,8 @@ public class EntityRabbit extends EntityAnimal {
|
||||
}
|
||||
|
||||
private int a(GeneratorAccess generatoraccess) {
|
||||
+ if (net.pl3x.purpur.PurpurConfig.killerRabbitChance > 0D && net.pl3x.purpur.PurpurConfig.killerRabbitChance > random.nextDouble()) return 99; // Purpur
|
||||
+
|
||||
BiomeBase biomebase = generatoraccess.getBiome(new BlockPosition(this));
|
||||
int i = this.random.nextInt(100);
|
||||
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index a511c83cc..1b1e4ca25 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -219,6 +219,11 @@ public class PurpurConfig {
|
||||
phantomsOrbitCrystalsRadius = getDouble("settings.mobs.phantom.orbit-crystal-radius", phantomsOrbitCrystalsRadius);
|
||||
}
|
||||
|
||||
+ public static double killerRabbitChance = 0.0D;
|
||||
+ private static void rabbitSettings() {
|
||||
+ killerRabbitChance = getDouble("settings.mobs.rabbit.spawn-killer-rabbit-chance", killerRabbitChance);
|
||||
+ }
|
||||
+
|
||||
public static boolean snowmanDropsPumpkin = false;
|
||||
public static boolean snowmanPumpkinPutBack = false;
|
||||
private static void snowmansSettings() {
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
From d901d884e7242ab02972eff077cf363bd6f9f965 Mon Sep 17 00:00:00 2001
|
||||
From 65018308e9670b479c8573bae7c23c46abd65d5e Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sun, 25 Aug 2019 00:09:52 -0500
|
||||
Subject: [PATCH] Dispenser curse of binding protection
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityInsentient.java | 8 +++++++-
|
||||
src/main/java/net/minecraft/server/EntityInsentient.java | 7 +++++++
|
||||
src/main/java/net/minecraft/server/ItemArmor.java | 3 ++-
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 5 +++++
|
||||
3 files changed, 14 insertions(+), 2 deletions(-)
|
||||
3 files changed, 14 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java
|
||||
index 89b45da1b..97081f6a4 100644
|
||||
index d1b4a2280..c6b76b333 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityInsentient.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityInsentient.java
|
||||
@@ -914,9 +914,15 @@ public abstract class EntityInsentient extends EntityLiving {
|
||||
@@ -909,6 +909,13 @@ public abstract class EntityInsentient extends EntityLiving {
|
||||
|
||||
}
|
||||
|
||||
@@ -26,9 +26,6 @@ index 89b45da1b..97081f6a4 100644
|
||||
+ public static EnumItemSlot getSlotForItemStack(ItemStack itemstack) { return h(itemstack); } // Purpur - OBFHELPER
|
||||
public static EnumItemSlot h(ItemStack itemstack) {
|
||||
Item item = itemstack.getItem();
|
||||
-
|
||||
return item != Blocks.CARVED_PUMPKIN.getItem() && (!(item instanceof ItemBlock) || !(((ItemBlock) item).getBlock() instanceof BlockSkullAbstract)) ? (item instanceof ItemArmor ? ((ItemArmor) item).b() : (item == Items.ELYTRA ? EnumItemSlot.CHEST : (item == Items.SHIELD ? EnumItemSlot.OFFHAND : EnumItemSlot.MAINHAND))) : EnumItemSlot.HEAD;
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ItemArmor.java b/src/main/java/net/minecraft/server/ItemArmor.java
|
||||
index df8c42bfb..a4b3d0c29 100644
|
||||
@@ -52,21 +49,21 @@ index df8c42bfb..a4b3d0c29 100644
|
||||
return this.b;
|
||||
}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 0eb8f8bfa..38d85c638 100644
|
||||
index 5bfa0de24..7a9b0ea7c 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -103,6 +103,11 @@ public class PurpurWorldConfig {
|
||||
campfiresGoOutInRain = getBoolean("campfires-go-out-in-rain", campfiresGoOutInRain);
|
||||
@@ -105,6 +105,11 @@ public class PurpurWorldConfig {
|
||||
campfireFallWithGravity = getBoolean("blocks.campfire.fall-with-gravity", campfireFallWithGravity);
|
||||
}
|
||||
|
||||
+ public boolean dispenserApplyCursedArmor = true;
|
||||
+ private void dispenserApplyCursedArmor() {
|
||||
+ dispenserApplyCursedArmor = getBoolean("dispenser-apply-cursed-armor-slots", dispenserApplyCursedArmor);
|
||||
+ private void dispenserSettings() {
|
||||
+ dispenserApplyCursedArmor = getBoolean("blocks.dispenser.apply-cursed-to-armor-slots", dispenserApplyCursedArmor);
|
||||
+ }
|
||||
+
|
||||
public boolean allowMoistSoilFromWaterBelow = true;
|
||||
private void allowMoistSoilFromWaterBelow() {
|
||||
allowMoistSoilFromWaterBelow = getBoolean("allow-moist-soil-from-water-below", allowMoistSoilFromWaterBelow);
|
||||
public boolean farmlandGetsMoistFromBelow = false;
|
||||
private void farmlandSettings() {
|
||||
farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow);
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
From 812ac4fe483e705caa989aa9f6effa20240b8d45 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 31 Aug 2019 17:47:11 -0500
|
||||
Subject: [PATCH] Add option to spawn Toast
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityRabbit.java | 3 ++-
|
||||
src/main/java/net/pl3x/purpur/PurpurConfig.java | 2 ++
|
||||
2 files changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityRabbit.java b/src/main/java/net/minecraft/server/EntityRabbit.java
|
||||
index d2f5e4e0f..2e89745ce 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityRabbit.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityRabbit.java
|
||||
@@ -348,7 +348,7 @@ public class EntityRabbit extends EntityAnimal {
|
||||
if (!this.hasCustomName()) {
|
||||
this.setCustomName(new ChatMessage(SystemUtils.a("entity", EntityRabbit.bx), new Object[0]));
|
||||
}
|
||||
- }
|
||||
+ } else if (i == 98) setCustomName(new ChatMessage("Toast")); // Purpur
|
||||
|
||||
this.datawatcher.set(EntityRabbit.bw, i);
|
||||
}
|
||||
@@ -370,6 +370,7 @@ public class EntityRabbit extends EntityAnimal {
|
||||
|
||||
private int a(GeneratorAccess generatoraccess) {
|
||||
if (net.pl3x.purpur.PurpurConfig.killerRabbitChance > 0D && net.pl3x.purpur.PurpurConfig.killerRabbitChance > random.nextDouble()) return 99; // Purpur
|
||||
+ if (net.pl3x.purpur.PurpurConfig.toastRabbitChance > 0D && net.pl3x.purpur.PurpurConfig.toastRabbitChance > random.nextDouble()) return 98; // Purpur
|
||||
|
||||
BiomeBase biomebase = generatoraccess.getBiome(new BlockPosition(this));
|
||||
int i = this.random.nextInt(100);
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index 1b1e4ca25..0537d0681 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -220,8 +220,10 @@ public class PurpurConfig {
|
||||
}
|
||||
|
||||
public static double killerRabbitChance = 0.0D;
|
||||
+ public static double toastRabbitChance = 0.0D;
|
||||
private static void rabbitSettings() {
|
||||
killerRabbitChance = getDouble("settings.mobs.rabbit.spawn-killer-rabbit-chance", killerRabbitChance);
|
||||
+ toastRabbitChance = getDouble("settings.mobs.rabbit.spawn-toast-chance", toastRabbitChance);
|
||||
}
|
||||
|
||||
public static boolean snowmanDropsPumpkin = false;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From 80f15a30500567abd6198792f83df09821255f8c Mon Sep 17 00:00:00 2001
|
||||
From 21ed5c312c292d6c47951c675a4a4ee133cecb92 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sun, 5 May 2019 12:58:45 -0500
|
||||
Subject: [PATCH] Implement LivingEntity safeFallDistance
|
||||
@@ -11,24 +11,24 @@ Subject: [PATCH] Implement LivingEntity safeFallDistance
|
||||
4 files changed, 18 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityGiantZombie.java b/src/main/java/net/minecraft/server/EntityGiantZombie.java
|
||||
index d9e5eaad1..bcbade19e 100644
|
||||
index d132a6105..0b200c725 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityGiantZombie.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityGiantZombie.java
|
||||
@@ -4,6 +4,9 @@ public class EntityGiantZombie extends EntityMonster {
|
||||
|
||||
@@ -5,6 +5,9 @@ public class EntityGiantZombie extends EntityMonster {
|
||||
public EntityGiantZombie(EntityTypes<? extends EntityGiantZombie> entitytypes, World world) {
|
||||
super(entitytypes, world);
|
||||
setStepHeight(world.purpurConfig.giantStepHeight); // Purpur
|
||||
+ // Purpur start
|
||||
+ this.safeFallDistance = 10.0F;
|
||||
+ // Purpur end
|
||||
}
|
||||
|
||||
@Override
|
||||
// Purpur start
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityHorseAbstract.java b/src/main/java/net/minecraft/server/EntityHorseAbstract.java
|
||||
index c56efe035..9e708769f 100644
|
||||
index 55e18e4c7..b14f67b3a 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityHorseAbstract.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityHorseAbstract.java
|
||||
@@ -202,7 +202,7 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven
|
||||
@@ -229,7 +229,7 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven
|
||||
|
||||
@Override
|
||||
protected int e(float f, float f1) {
|
||||
@@ -38,33 +38,33 @@ index c56efe035..9e708769f 100644
|
||||
|
||||
protected int getChestSlots() {
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index ad6f96988..d44977891 100644
|
||||
index cd4526039..60e2b4268 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -125,6 +125,7 @@ public abstract class EntityLiving extends Entity {
|
||||
// CraftBukkit start
|
||||
public int expToDrop;
|
||||
public int maxAirTicks = 300;
|
||||
+ public float safeFallDistance = 3.0F;
|
||||
+ public float safeFallDistance = 3.0F; // Purpur
|
||||
boolean forceDrops;
|
||||
ArrayList<org.bukkit.inventory.ItemStack> drops = new ArrayList<org.bukkit.inventory.ItemStack>();
|
||||
public org.bukkit.craftbukkit.attribute.CraftAttributeMap craftAttributes;
|
||||
@@ -1544,7 +1545,7 @@ public abstract class EntityLiving extends Entity {
|
||||
@@ -1546,7 +1547,7 @@ public abstract class EntityLiving extends Entity {
|
||||
MobEffect mobeffect = this.getEffect(MobEffects.JUMP);
|
||||
float f2 = mobeffect == null ? 0.0F : (float) (mobeffect.getAmplifier() + 1);
|
||||
|
||||
- return MathHelper.f((f - 3.0F - f2) * f1);
|
||||
+ return MathHelper.f((f - this.safeFallDistance - f2) * f1);
|
||||
+ return MathHelper.f((f - this.safeFallDistance - f2) * f1); // Purpur
|
||||
}
|
||||
|
||||
protected void cZ() {
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||||
index b27fd44dc..33f56b85e 100644
|
||||
index 277eb54e7..8980a12eb 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||||
@@ -712,4 +712,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
return getHandle().isHandRaised();
|
||||
@@ -727,4 +727,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
}
|
||||
|
||||
// Paper end
|
||||
+
|
||||
+ // Purpur start
|
||||
@@ -1,12 +1,12 @@
|
||||
From 9088e3e2ea32fb54c89c4c66fd0d99411add6d90 Mon Sep 17 00:00:00 2001
|
||||
From d7af0fd190bb5361b44d40cea9eb656f2c622831 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 7 Sep 2019 22:47:59 -0500
|
||||
Subject: [PATCH] Add option for boats to eject players on land
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityBoat.java | 1 +
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 5 +++++
|
||||
2 files changed, 6 insertions(+)
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 2 ++
|
||||
2 files changed, 3 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityBoat.java b/src/main/java/net/minecraft/server/EntityBoat.java
|
||||
index 563fc8ced..479ed7c7b 100644
|
||||
@@ -21,21 +21,25 @@ index 563fc8ced..479ed7c7b 100644
|
||||
} else {
|
||||
return EntityBoat.EnumStatus.IN_AIR;
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index 38d85c638..b2c62de05 100644
|
||||
index 7a9b0ea7c..d94f9eac8 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -70,6 +70,11 @@ public class PurpurWorldConfig {
|
||||
bambooSmallHeight = getInt("bamboo.small-height", bambooSmallHeight);
|
||||
@@ -142,6 +142,7 @@ public class PurpurWorldConfig {
|
||||
turtleEggsBreakFromMinecarts = getBoolean("blocks.turtle_egg.break-from-minecarts", turtleEggsBreakFromMinecarts);
|
||||
}
|
||||
|
||||
+ public boolean boatEjectPlayersOnLand = false;
|
||||
+ private void boatEjectPlayersOnLand() {
|
||||
+ boatEjectPlayersOnLand = getBoolean("boat-eject-players-on-land", boatEjectPlayersOnLand);
|
||||
+ }
|
||||
+
|
||||
public boolean campfireObeysGravity = true;
|
||||
private void campfireObeysGravity() {
|
||||
campfireObeysGravity = getBoolean("campfire-obeys-gravity", campfireObeysGravity);
|
||||
public boolean controllableMinecarts = false;
|
||||
public boolean controllableMinecartsPlaceAnywhere = false;
|
||||
public float controllableMinecartsStepHeight = 1.0F;
|
||||
@@ -153,6 +154,7 @@ public class PurpurWorldConfig {
|
||||
public boolean milkCuresBadOmen = true;
|
||||
public boolean useBetterMending = false;
|
||||
private void gameplayMechanicsSettings() {
|
||||
+ boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand);
|
||||
controllableMinecarts = getBoolean("gameplay-mechanics.controllable-minecarts.enabled", controllableMinecarts);
|
||||
controllableMinecartsPlaceAnywhere = getBoolean("gameplay-mechanics.controllable-minecarts.place-anywhere", controllableMinecartsPlaceAnywhere);
|
||||
controllableMinecartsStepHeight = (float) getDouble("gameplay-mechanics.controllable-minecarts.step-height", controllableMinecartsStepHeight);
|
||||
--
|
||||
2.24.0
|
||||
|
||||
|
||||
@@ -1,34 +1,33 @@
|
||||
From 507d771b4b5a27cf3dc9232f4af6b62001b760d9 Mon Sep 17 00:00:00 2001
|
||||
From 1f1c65d6b9caf672b0adb2543682f4bdb07aa36e Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Fri, 31 May 2019 21:24:33 -0500
|
||||
Subject: [PATCH] Advancement API Additions
|
||||
|
||||
---
|
||||
.../net/minecraft/server/Advancement.java | 4 +-
|
||||
.../minecraft/server/AdvancementDisplay.java | 8 +++-
|
||||
.../server/AdvancementFrameType.java | 14 ++++--
|
||||
.../advancement/CraftAdvancement.java | 6 +++
|
||||
.../advancement/CraftAdvancementDisplay.java | 48 +++++++++++++++++++
|
||||
5 files changed, 74 insertions(+), 6 deletions(-)
|
||||
.../net/minecraft/server/Advancement.java | 2 +-
|
||||
.../minecraft/server/AdvancementDisplay.java | 12 ++++-
|
||||
.../server/AdvancementFrameType.java | 15 +++++-
|
||||
.../minecraft/server/CriterionTrigger.java | 1 +
|
||||
.../advancement/CraftAdvancement.java | 7 +++
|
||||
.../advancement/CraftAdvancementDisplay.java | 47 +++++++++++++++++++
|
||||
6 files changed, 79 insertions(+), 5 deletions(-)
|
||||
create mode 100644 src/main/java/org/bukkit/craftbukkit/advancement/CraftAdvancementDisplay.java
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Advancement.java b/src/main/java/net/minecraft/server/Advancement.java
|
||||
index 4b85551fa..c9df67464 100644
|
||||
index 4b85551fa..4cba4187a 100644
|
||||
--- a/src/main/java/net/minecraft/server/Advancement.java
|
||||
+++ b/src/main/java/net/minecraft/server/Advancement.java
|
||||
@@ -64,8 +64,8 @@ public class Advancement {
|
||||
return this.parent;
|
||||
@@ -65,7 +65,7 @@ public class Advancement {
|
||||
}
|
||||
|
||||
- @Nullable
|
||||
@Nullable
|
||||
- public AdvancementDisplay c() {
|
||||
+ @Nullable public AdvancementDisplay getDisplay() { return c(); } // Purpur - OBFHELPER
|
||||
+ @Nullable public AdvancementDisplay c() {
|
||||
+ public AdvancementDisplay c() { return getDisplay(); } public AdvancementDisplay getDisplay() { // Purpur
|
||||
return this.display;
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/AdvancementDisplay.java b/src/main/java/net/minecraft/server/AdvancementDisplay.java
|
||||
index e8172d56f..edfd7f84a 100644
|
||||
index e8172d56f..976c85ef1 100644
|
||||
--- a/src/main/java/net/minecraft/server/AdvancementDisplay.java
|
||||
+++ b/src/main/java/net/minecraft/server/AdvancementDisplay.java
|
||||
@@ -16,10 +16,11 @@ public class AdvancementDisplay {
|
||||
@@ -36,15 +35,16 @@ index e8172d56f..edfd7f84a 100644
|
||||
private final AdvancementFrameType e;
|
||||
private final boolean f;
|
||||
- private final boolean g;
|
||||
+ private boolean g; public void setShouldAnnounceToChat(boolean announce) { this.g = announce; } // Purpur - OBFHELPER - un-finalize
|
||||
private final boolean h;
|
||||
- private final boolean h;
|
||||
+ private boolean g; // Purpur - un-finalize
|
||||
+ private boolean h; // Purpur - un-finalize
|
||||
private float i;
|
||||
private float j;
|
||||
+ public final org.bukkit.advancement.AdvancementDisplay bukkit = new org.bukkit.craftbukkit.advancement.CraftAdvancementDisplay(this); // Purpur
|
||||
|
||||
public AdvancementDisplay(ItemStack itemstack, IChatBaseComponent ichatbasecomponent, IChatBaseComponent ichatbasecomponent1, @Nullable MinecraftKey minecraftkey, AdvancementFrameType advancementframetype, boolean flag, boolean flag1, boolean flag2) {
|
||||
this.a = ichatbasecomponent;
|
||||
@@ -37,22 +38,27 @@ public class AdvancementDisplay {
|
||||
@@ -37,22 +38,29 @@ public class AdvancementDisplay {
|
||||
this.j = f1;
|
||||
}
|
||||
|
||||
@@ -63,29 +63,33 @@ index e8172d56f..edfd7f84a 100644
|
||||
return this.e;
|
||||
}
|
||||
|
||||
+ public void setShouldAnnounceToChat(boolean announce) { this.g = announce; } // Purpur - OBFHELPER
|
||||
+ public boolean shouldAnnounceToChat() { return i(); } // Purpur - OBFHELPER
|
||||
public boolean i() {
|
||||
return this.g;
|
||||
}
|
||||
|
||||
+ public void setHidden(boolean hidden) { this.h = hidden; } // Purpur - OBFHELPER
|
||||
+ public boolean isHidden() { return j(); } // Purpur - OBFHELPER
|
||||
public boolean j() {
|
||||
return this.h;
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/AdvancementFrameType.java b/src/main/java/net/minecraft/server/AdvancementFrameType.java
|
||||
index a9c49a434..14a35ba4c 100644
|
||||
index a9c49a434..551a84547 100644
|
||||
--- a/src/main/java/net/minecraft/server/AdvancementFrameType.java
|
||||
+++ b/src/main/java/net/minecraft/server/AdvancementFrameType.java
|
||||
@@ -1,14 +1,22 @@
|
||||
@@ -1,14 +1,25 @@
|
||||
package net.minecraft.server;
|
||||
|
||||
+import org.bukkit.advancement.FrameType; // Purpur
|
||||
+
|
||||
public enum AdvancementFrameType {
|
||||
-
|
||||
|
||||
- TASK("task", 0, EnumChatFormat.GREEN), CHALLENGE("challenge", 26, EnumChatFormat.DARK_PURPLE), GOAL("goal", 52, EnumChatFormat.GREEN);
|
||||
+ // Purpur start
|
||||
+ TASK("task", 0, EnumChatFormat.GREEN, org.bukkit.advancement.FrameType.TASK),
|
||||
+ CHALLENGE("challenge", 26, EnumChatFormat.DARK_PURPLE, org.bukkit.advancement.FrameType.CHALLENGE),
|
||||
+ GOAL("goal", 52, EnumChatFormat.GREEN, org.bukkit.advancement.FrameType.GOAL);
|
||||
+ TASK("task", 0, EnumChatFormat.GREEN, FrameType.TASK),
|
||||
+ CHALLENGE("challenge", 26, EnumChatFormat.DARK_PURPLE, FrameType.CHALLENGE),
|
||||
+ GOAL("goal", 52, EnumChatFormat.GREEN, FrameType.GOAL);
|
||||
+ // Purpur end
|
||||
|
||||
private final String d;
|
||||
@@ -94,42 +98,48 @@ index a9c49a434..14a35ba4c 100644
|
||||
|
||||
- private AdvancementFrameType(String s, int i, EnumChatFormat enumchatformat) {
|
||||
+ // Purpur start
|
||||
+ public final org.bukkit.advancement.FrameType bukkit;
|
||||
+ public final FrameType bukkit;
|
||||
+
|
||||
+ AdvancementFrameType(String s, int i, EnumChatFormat enumchatformat, org.bukkit.advancement.FrameType bukkit) {
|
||||
+ AdvancementFrameType(String s, int i, EnumChatFormat enumchatformat, FrameType bukkit) {
|
||||
+ this.bukkit = bukkit;
|
||||
+ // Purpur end
|
||||
this.d = s;
|
||||
this.e = i;
|
||||
this.f = enumchatformat;
|
||||
diff --git a/src/main/java/net/minecraft/server/CriterionTrigger.java b/src/main/java/net/minecraft/server/CriterionTrigger.java
|
||||
index 4fe732447..6e5d81daf 100644
|
||||
--- a/src/main/java/net/minecraft/server/CriterionTrigger.java
|
||||
+++ b/src/main/java/net/minecraft/server/CriterionTrigger.java
|
||||
@@ -27,6 +27,7 @@ public interface CriterionTrigger<T extends CriterionInstance> {
|
||||
this.c = s;
|
||||
}
|
||||
|
||||
+ public T getInstance() { return a(); } // Purpur - OBFHELPER
|
||||
public T a() {
|
||||
return this.a;
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/advancement/CraftAdvancement.java b/src/main/java/org/bukkit/craftbukkit/advancement/CraftAdvancement.java
|
||||
index a5aadf285..36da44414 100644
|
||||
index a5aadf285..b0a7092d6 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/advancement/CraftAdvancement.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/advancement/CraftAdvancement.java
|
||||
@@ -4,6 +4,7 @@ import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import net.minecraft.server.Advancement;
|
||||
import org.bukkit.NamespacedKey;
|
||||
+import org.bukkit.advancement.AdvancementDisplay;
|
||||
import org.bukkit.craftbukkit.util.CraftNamespacedKey;
|
||||
|
||||
public class CraftAdvancement implements org.bukkit.advancement.Advancement {
|
||||
@@ -27,4 +28,9 @@ public class CraftAdvancement implements org.bukkit.advancement.Advancement {
|
||||
@@ -27,4 +27,11 @@ public class CraftAdvancement implements org.bukkit.advancement.Advancement {
|
||||
public Collection<String> getCriteria() {
|
||||
return Collections.unmodifiableCollection(handle.getCriteria().keySet());
|
||||
}
|
||||
+
|
||||
+ // Purpur start
|
||||
+ @Override
|
||||
+ public AdvancementDisplay getDisplay() {
|
||||
+ public org.bukkit.advancement.AdvancementDisplay getDisplay() {
|
||||
+ return getHandle().getDisplay() == null ? null : getHandle().getDisplay().bukkit;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/advancement/CraftAdvancementDisplay.java b/src/main/java/org/bukkit/craftbukkit/advancement/CraftAdvancementDisplay.java
|
||||
new file mode 100644
|
||||
index 000000000..dae18cd80
|
||||
index 000000000..1cbb1e67b
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/advancement/CraftAdvancementDisplay.java
|
||||
@@ -0,0 +1,48 @@
|
||||
@@ -0,0 +1,47 @@
|
||||
+package org.bukkit.craftbukkit.advancement;
|
||||
+
|
||||
+import net.minecraft.server.AdvancementDisplay;
|
||||
@@ -137,7 +147,6 @@ index 000000000..dae18cd80
|
||||
+import org.bukkit.craftbukkit.util.CraftChatMessage;
|
||||
+
|
||||
+public class CraftAdvancementDisplay implements org.bukkit.advancement.AdvancementDisplay {
|
||||
+
|
||||
+ private final AdvancementDisplay handle;
|
||||
+
|
||||
+ public CraftAdvancementDisplay(AdvancementDisplay handle) {
|
||||
@@ -1,58 +0,0 @@
|
||||
From 35e3756e3ce2321954c38217ec665122095ce4cf Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Thu, 3 Oct 2019 18:08:03 -0500
|
||||
Subject: [PATCH] Allow leashing villagers
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityInsentient.java | 1 +
|
||||
src/main/java/net/minecraft/server/EntityVillager.java | 7 +++++++
|
||||
src/main/java/net/pl3x/purpur/PurpurConfig.java | 2 ++
|
||||
3 files changed, 10 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java
|
||||
index 97081f6a4..491db81ba 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityInsentient.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityInsentient.java
|
||||
@@ -1062,6 +1062,7 @@ public abstract class EntityInsentient extends EntityLiving {
|
||||
if (!this.isAlive()) {
|
||||
return false;
|
||||
} else if (this.getLeashHolder() == entityhuman) {
|
||||
+ if (net.pl3x.purpur.PurpurConfig.allowLeashingVillagers && enumhand == EnumHand.OFF_HAND && this instanceof EntityVillager) return true; // Purpur
|
||||
// CraftBukkit start - fire PlayerUnleashEntityEvent
|
||||
if (CraftEventFactory.callPlayerUnleashEntityEvent(this, entityhuman).isCancelled()) {
|
||||
((EntityPlayer) entityhuman).playerConnection.sendPacket(new PacketPlayOutAttachEntity(this, this.getLeashHolder()));
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java
|
||||
index a0137c7af..a53decb2c 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityVillager.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityVillager.java
|
||||
@@ -987,4 +987,11 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation
|
||||
|
||||
return optional.isPresent() && optional1.isPresent() ? i - ((MinecraftSerializableLong) optional.get()).a() < 24000L && i - ((MinecraftSerializableLong) optional1.get()).a() < 36000L : false;
|
||||
}
|
||||
+
|
||||
+ // Purpur - start
|
||||
+ @Override
|
||||
+ public boolean a(EntityHuman entityhuman) {
|
||||
+ return net.pl3x.purpur.PurpurConfig.allowLeashingVillagers && !this.isLeashed();
|
||||
+ }
|
||||
+ // Purpur - end
|
||||
}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index 0537d0681..8298a1276 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -235,9 +235,11 @@ public class PurpurConfig {
|
||||
|
||||
public static boolean useVillagerBrainTicksOnlyWhenLagging = true;
|
||||
public static int villagerBrainTicks = 20;
|
||||
+ public static boolean allowLeashingVillagers = false;
|
||||
private static void villagerSettings() {
|
||||
useVillagerBrainTicksOnlyWhenLagging = getBoolean("settings.mobs.villager.use-brain-ticks-only-when-lagging", useVillagerBrainTicksOnlyWhenLagging);
|
||||
villagerBrainTicks = getInt("settings.mobs.villager.brain-ticks", villagerBrainTicks);
|
||||
+ allowLeashingVillagers = getBoolean("settings.mobs.villager.allow-leashing", allowLeashingVillagers);
|
||||
}
|
||||
|
||||
public static boolean largeEnderChests = true;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,42 +1,53 @@
|
||||
From 0a517343ec23abd4780b28456e5c19f093585461 Mon Sep 17 00:00:00 2001
|
||||
From 0dcd31b13c72bb780ece22a025259c040ba956d9 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sun, 6 Oct 2019 12:46:35 -0500
|
||||
Subject: [PATCH] Add option to set armorstand step height
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityArmorStand.java | 2 +-
|
||||
src/main/java/net/pl3x/purpur/PurpurConfig.java | 5 +++++
|
||||
2 files changed, 6 insertions(+), 1 deletion(-)
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 2 ++
|
||||
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityArmorStand.java b/src/main/java/net/minecraft/server/EntityArmorStand.java
|
||||
index fc4e12d9af..3b42b680eb 100644
|
||||
index dfe8c57ce..0f6870a45 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityArmorStand.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityArmorStand.java
|
||||
@@ -62,7 +62,7 @@ public class EntityArmorStand extends EntityLiving {
|
||||
@@ -62,7 +62,6 @@ public class EntityArmorStand extends EntityLiving {
|
||||
this.leftLegPose = EntityArmorStand.bv;
|
||||
this.rightLegPose = EntityArmorStand.bw;
|
||||
if (world != null) this.canTick = world.paperConfig.armorStandTick; // Paper - armour stand ticking
|
||||
- this.H = 0.0F;
|
||||
+ this.H = net.pl3x.purpur.PurpurConfig.armorstandStepHeight; // Purpur
|
||||
}
|
||||
|
||||
public EntityArmorStand(World world, double d0, double d1, double d2) {
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index 7ab88bd640..25ca8381b3 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -188,6 +188,11 @@ public class PurpurConfig {
|
||||
requireShiftToMount = getBoolean("settings.mobs.require-shift-to-mount", requireShiftToMount);
|
||||
@@ -615,6 +614,7 @@ public class EntityArmorStand extends EntityLiving {
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
+ setStepHeight(world.purpurConfig.armorstandStepHeight); // Purpur
|
||||
// Paper start
|
||||
if (!this.canTick) {
|
||||
if (this.noTickPoseDirty) {
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index d94f9eac8..e71f40a53 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -142,6 +142,7 @@ public class PurpurWorldConfig {
|
||||
turtleEggsBreakFromMinecarts = getBoolean("blocks.turtle_egg.break-from-minecarts", turtleEggsBreakFromMinecarts);
|
||||
}
|
||||
|
||||
+ public static float armorstandStepHeight = 0.0F;
|
||||
+ private static void armorstandSettings() {
|
||||
+ armorstandStepHeight = (float) getDouble("settings.armorstand.step-height", armorstandStepHeight);
|
||||
+ }
|
||||
+
|
||||
public static int feedMushroomsToCows = 0;
|
||||
private static void cowsSettings() {
|
||||
feedMushroomsToCows = getInt("settings.mobs.cow.feed-mushrooms-for-mooshroom", feedMushroomsToCows);
|
||||
+ public float armorstandStepHeight = 0.0F;
|
||||
public boolean boatEjectPlayersOnLand = false;
|
||||
public boolean controllableMinecarts = false;
|
||||
public boolean controllableMinecartsPlaceAnywhere = false;
|
||||
@@ -154,6 +155,7 @@ public class PurpurWorldConfig {
|
||||
public boolean milkCuresBadOmen = true;
|
||||
public boolean useBetterMending = false;
|
||||
private void gameplayMechanicsSettings() {
|
||||
+ armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight);
|
||||
boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand);
|
||||
controllableMinecarts = getBoolean("gameplay-mechanics.controllable-minecarts.enabled", controllableMinecarts);
|
||||
controllableMinecartsPlaceAnywhere = getBoolean("gameplay-mechanics.controllable-minecarts.place-anywhere", controllableMinecartsPlaceAnywhere);
|
||||
--
|
||||
2.24.0.rc1
|
||||
2.24.0
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From d8598756085a46d3e6d662efc8be4172455b2854 Mon Sep 17 00:00:00 2001
|
||||
From 37d5c0c15efe5b8417cc92180ee309f4a74ecd6f Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Fri, 5 Jul 2019 16:36:55 -0500
|
||||
Subject: [PATCH] Implement ItemFactory#getMonsterEgg
|
||||
@@ -9,7 +9,7 @@ Subject: [PATCH] Implement ItemFactory#getMonsterEgg
|
||||
2 files changed, 15 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ItemMonsterEgg.java b/src/main/java/net/minecraft/server/ItemMonsterEgg.java
|
||||
index b2dea4d944..df22e15a4a 100644
|
||||
index 24af4c11d..8ef2c3223 100644
|
||||
--- a/src/main/java/net/minecraft/server/ItemMonsterEgg.java
|
||||
+++ b/src/main/java/net/minecraft/server/ItemMonsterEgg.java
|
||||
@@ -8,7 +8,7 @@ import javax.annotation.Nullable;
|
||||
@@ -22,7 +22,7 @@ index b2dea4d944..df22e15a4a 100644
|
||||
private final int c;
|
||||
private final EntityTypes<?> d;
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
|
||||
index 23d7756456..29161032c3 100644
|
||||
index 23d775645..29161032c 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
|
||||
@@ -354,4 +354,18 @@ public final class CraftItemFactory implements ItemFactory {
|
||||
@@ -45,5 +45,5 @@ index 23d7756456..29161032c3 100644
|
||||
+ // Purpur end
|
||||
}
|
||||
--
|
||||
2.24.0.rc1
|
||||
2.24.0
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
From 9d111c00f2bbadee62ebce15c894ce547fffe2a8 Mon Sep 17 00:00:00 2001
|
||||
From 2525246c4031a373ab3af59725a2586a66d40044 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Fri, 11 Oct 2019 00:17:39 -0500
|
||||
Subject: [PATCH] Alternative Keepalive Handling
|
||||
|
||||
---
|
||||
.../server/PacketPlayInKeepAlive.java | 1 +
|
||||
.../minecraft/server/PlayerConnection.java | 28 +++++++++++++++++++
|
||||
.../minecraft/server/PlayerConnection.java | 27 +++++++++++++++++++
|
||||
.../java/net/pl3x/purpur/PurpurConfig.java | 5 ++++
|
||||
3 files changed, 34 insertions(+)
|
||||
3 files changed, 33 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PacketPlayInKeepAlive.java b/src/main/java/net/minecraft/server/PacketPlayInKeepAlive.java
|
||||
index 8e93f1540..470f92c4f 100644
|
||||
@@ -22,7 +22,7 @@ index 8e93f1540..470f92c4f 100644
|
||||
return this.a;
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index d99a2837c..36b4fb28c 100644
|
||||
index d897c7fd4..1f8826206 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -74,6 +74,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -33,7 +33,7 @@ index d99a2837c..36b4fb28c 100644
|
||||
// CraftBukkit start - multithreaded fields
|
||||
private volatile int chatThrottle;
|
||||
private static final AtomicIntegerFieldUpdater chatSpamField = AtomicIntegerFieldUpdater.newUpdater(PlayerConnection.class, "chatThrottle");
|
||||
@@ -245,6 +246,21 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -247,6 +248,21 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
long currentTime = SystemUtils.getMonotonicMillis();
|
||||
long elapsedTime = currentTime - this.getLastPing();
|
||||
|
||||
@@ -55,7 +55,7 @@ index d99a2837c..36b4fb28c 100644
|
||||
if (this.isPendingPing()) {
|
||||
if (!this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // check keepalive limit, don't fire if already disconnected
|
||||
PlayerConnection.LOGGER.warn("{} was kicked due to keepalive timeout!", this.player.getName()); // more info
|
||||
@@ -2667,6 +2683,18 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -2669,6 +2685,17 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
|
||||
@Override
|
||||
public void a(PacketPlayInKeepAlive packetplayinkeepalive) {
|
||||
@@ -70,16 +70,15 @@ index d99a2837c..36b4fb28c 100644
|
||||
+ }
|
||||
+ } else
|
||||
+ // Purpur end
|
||||
+
|
||||
//PlayerConnectionUtils.ensureMainThread(packetplayinkeepalive, this, this.player.getWorldServer()); // CraftBukkit // Paper - This shouldn't be on the main thread
|
||||
if (this.awaitingKeepAlive && packetplayinkeepalive.b() == this.h) {
|
||||
int i = (int) (SystemUtils.getMonotonicMillis() - this.lastKeepAlive);
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index 40b5db9e0..e7805ad1c 100644
|
||||
index b4cd05d18..7b2564d4f 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -167,6 +167,11 @@ public class PurpurConfig {
|
||||
useBetterMending = getBoolean("settings.use-better-mending", useBetterMending);
|
||||
@@ -157,6 +157,11 @@ public class PurpurConfig {
|
||||
packetRateLimitKickMessage = getString("settings.packet-limiter.kick-message", packetRateLimitKickMessage);
|
||||
}
|
||||
|
||||
+ public static boolean useAlternateKeepAlive = false;
|
||||
@@ -87,9 +86,9 @@ index 40b5db9e0..e7805ad1c 100644
|
||||
+ useAlternateKeepAlive = getBoolean("settings.use-alternate-keepalive", useAlternateKeepAlive);
|
||||
+ }
|
||||
+
|
||||
public static boolean updatePermissionsOnWorldChange = false;
|
||||
private static void updatePermissionsOnWorldChange() {
|
||||
updatePermissionsOnWorldChange = getBoolean("settings.update-perms-on-world-change", updatePermissionsOnWorldChange);
|
||||
public static boolean dontSendUselessEntityPackets = false;
|
||||
public static boolean fixItemPositionDesync = false;
|
||||
private static void dontSendUselessEntityPackets() {
|
||||
--
|
||||
2.24.0
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From f0ed584cb0c32d2271305bd018d94323fd7fe3d8 Mon Sep 17 00:00:00 2001
|
||||
From 53d2cc17b40593ea28aecaca9bf161a46fcb39b4 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Fri, 5 Jul 2019 18:21:00 -0500
|
||||
Subject: [PATCH] Implement PlayerSetSpawnerTypeWithEggEvent
|
||||
@@ -8,7 +8,7 @@ Subject: [PATCH] Implement PlayerSetSpawnerTypeWithEggEvent
|
||||
1 file changed, 14 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ItemMonsterEgg.java b/src/main/java/net/minecraft/server/ItemMonsterEgg.java
|
||||
index bb3b0abd9..4b77c099a 100644
|
||||
index 8ef2c3223..237fdeda5 100644
|
||||
--- a/src/main/java/net/minecraft/server/ItemMonsterEgg.java
|
||||
+++ b/src/main/java/net/minecraft/server/ItemMonsterEgg.java
|
||||
@@ -2,6 +2,11 @@ package net.minecraft.server;
|
||||
@@ -40,5 +40,5 @@ index bb3b0abd9..4b77c099a 100644
|
||||
tileentity.update();
|
||||
world.notify(blockposition, iblockdata, iblockdata, 3);
|
||||
--
|
||||
2.23.0.rc1
|
||||
2.24.0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From 3950117b027305da1674b84a54864525ee1a5510 Mon Sep 17 00:00:00 2001
|
||||
From 728f9fc1f84058a2662001586b51daef23f9692b Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 19 Oct 2019 03:20:59 -0500
|
||||
Subject: [PATCH] Add MonsterEggSpawnEvent
|
||||
@@ -1,52 +0,0 @@
|
||||
From 76ec68db1e1b4af4b2039dbc84b1a075bc760388 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Fri, 18 Oct 2019 23:34:48 -0500
|
||||
Subject: [PATCH] Add entity jump API
|
||||
|
||||
---
|
||||
.../java/net/minecraft/server/EntityLiving.java | 2 ++
|
||||
.../craftbukkit/entity/CraftLivingEntity.java | 14 ++++++++++++++
|
||||
2 files changed, 16 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index d4fb8e4a6..3b6a337e6 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -2619,8 +2619,10 @@ public abstract class EntityLiving extends Entity {
|
||||
} else if (this.aH()) {
|
||||
this.c(TagsFluid.LAVA);
|
||||
} else if ((this.onGround || this.N > 0.0D && this.N <= 0.4D) && this.jumpTicks == 0) {
|
||||
+ if (new net.pl3x.purpur.event.entity.EntityJumpEvent(getBukkitLivingEntity()).callEvent()) { // Purpur
|
||||
this.jump();
|
||||
this.jumpTicks = 10;
|
||||
+ } // Purpur
|
||||
}
|
||||
} else {
|
||||
this.jumpTicks = 0;
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||||
index ffd137228..e408c8922 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||||
@@ -733,5 +733,19 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
public void setCanBeRiddenInWater(boolean canBeRiddenInWater) {
|
||||
getHandle().setCanBeRiddenInWater(canBeRiddenInWater);
|
||||
}
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean isJumping() {
|
||||
+ return getHandle().isJumping();
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void setJumping(boolean jumping) {
|
||||
+ getHandle().setJumping(jumping);
|
||||
+ if (jumping && getHandle() instanceof EntityInsentient) {
|
||||
+ // this is needed to actually make a mob jump
|
||||
+ ((EntityInsentient) getHandle()).getControllerJump().jump();
|
||||
+ }
|
||||
+ }
|
||||
// Purpur end
|
||||
}
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,28 +1,30 @@
|
||||
From 5b8ee0e14a894dbd16b92e46f44761f6211bc1c6 Mon Sep 17 00:00:00 2001
|
||||
From 601228518135fb59602abe20842726085da634cb Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
||||
Date: Sat, 1 Feb 2020 22:22:16 -0600
|
||||
Subject: [PATCH] Add moon phase API
|
||||
|
||||
---
|
||||
src/main/java/org/bukkit/craftbukkit/CraftWorld.java | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
src/main/java/org/bukkit/craftbukkit/CraftWorld.java | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
index 65d7aa8ec..47d1f7c39 100644
|
||||
index a14b8cb98..4ee61f33f 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
@@ -2437,6 +2437,11 @@ public class CraftWorld implements World {
|
||||
IBlockData validData = net.minecraft.server.Block.getValidBlockForPosition(((CraftBlockData) blockdata).getState(), getHandle(), net.minecraft.server.MCUtil.toBlockPosition(location));
|
||||
return CraftBlockData.fromData(validData == null ? Blocks.AIR.getBlockData() : validData);
|
||||
@@ -2412,6 +2412,13 @@ public class CraftWorld implements World {
|
||||
return persistentRaid.raids.values().stream().map(CraftRaid::new).collect(Collectors.toList());
|
||||
}
|
||||
+
|
||||
|
||||
+ // Purpur start
|
||||
+ @Override
|
||||
+ public net.pl3x.purpur.MoonPhase getMoonPhase() {
|
||||
+ return net.pl3x.purpur.MoonPhase.getPhase(getFullTime() / 24000L);
|
||||
+ }
|
||||
// Purpur end
|
||||
|
||||
+ // Purpur end
|
||||
+
|
||||
// Paper start
|
||||
@Override
|
||||
public CompletableFuture<Chunk> getChunkAtAsync(int x, int z, boolean gen) {
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,99 +0,0 @@
|
||||
From b621663e391fccba27606d962ace87003b605d37 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Fri, 18 Oct 2019 23:58:56 -0500
|
||||
Subject: [PATCH] Add block and fluid tick events
|
||||
|
||||
---
|
||||
.../java/net/minecraft/server/WorldServer.java | 6 ++++--
|
||||
.../net/pl3x/purpur/PurpurWorldConfig.java | 7 +++++++
|
||||
.../org/bukkit/craftbukkit/CraftWorld.java | 18 ++++++++++++++++++
|
||||
3 files changed, 29 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
|
||||
index 67d65e8e0..abb3d2568 100644
|
||||
--- a/src/main/java/net/minecraft/server/WorldServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/WorldServer.java
|
||||
@@ -604,7 +604,7 @@ public class WorldServer extends World {
|
||||
gameprofilerfiller.enter("randomTick");
|
||||
IBlockData iblockdata = chunksection.getType(blockposition2.getX() - j, blockposition2.getY() - j1, blockposition2.getZ() - k);
|
||||
|
||||
- if (iblockdata.q()) {
|
||||
+ if (iblockdata.q() && (!purpurConfig.blockTickEvent || new net.pl3x.purpur.event.block.BlockTickEvent(getWorld(), blockposition2.x, blockposition2.y, blockposition2.z, true).callEvent())) { // Purpur
|
||||
iblockdata.getBlock().randomTick = true; // Paper - fix MC-113809
|
||||
iblockdata.b(this, blockposition2, this.random);
|
||||
iblockdata.getBlock().randomTick = false; // Paper - fix MC-113809
|
||||
@@ -612,7 +612,7 @@ public class WorldServer extends World {
|
||||
|
||||
Fluid fluid = iblockdata.getFluid();
|
||||
|
||||
- if (fluid.h()) {
|
||||
+ if (fluid.h() && (!purpurConfig.fluidTickEvent || new net.pl3x.purpur.event.block.FluidTickEvent(getWorld(), blockposition2.x, blockposition2.y, blockposition2.z, true).callEvent())) { // Purpur
|
||||
fluid.b(this, blockposition2, this.random);
|
||||
}
|
||||
|
||||
@@ -701,6 +701,7 @@ public class WorldServer extends World {
|
||||
Fluid fluid = this.getFluid(nextticklistentry.a);
|
||||
|
||||
if (fluid.getType() == nextticklistentry.b()) {
|
||||
+ if (purpurConfig.fluidTickEvent && !new net.pl3x.purpur.event.block.FluidTickEvent(getWorld(), nextticklistentry.a.x, nextticklistentry.a.y, nextticklistentry.a.z).callEvent()) return; // Purpur
|
||||
fluid.a((World) this, nextticklistentry.a);
|
||||
}
|
||||
|
||||
@@ -710,6 +711,7 @@ public class WorldServer extends World {
|
||||
IBlockData iblockdata = this.getType(nextticklistentry.a);
|
||||
|
||||
if (iblockdata.getBlock() == nextticklistentry.b()) {
|
||||
+ if (purpurConfig.blockTickEvent && !new net.pl3x.purpur.event.block.BlockTickEvent(getWorld(), nextticklistentry.a.x, nextticklistentry.a.y, nextticklistentry.a.z).callEvent()) return; // Purpur
|
||||
iblockdata.a(this, nextticklistentry.a, this.random);
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index b2c62de05..b82fc8d19 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -58,6 +58,13 @@ public class PurpurWorldConfig {
|
||||
return PurpurConfig.config.getString("world-settings." + worldName + "." + path, PurpurConfig.config.getString("world-settings.default." + path));
|
||||
}
|
||||
|
||||
+ public boolean blockTickEvent = false;
|
||||
+ public boolean fluidTickEvent = false;
|
||||
+ private void tickEvents() {
|
||||
+ blockTickEvent = getBoolean("block-tick-events", false);
|
||||
+ fluidTickEvent = getBoolean("fluid-tick-events", false);
|
||||
+ }
|
||||
+
|
||||
public boolean editableSigns = false;
|
||||
private void editableSigns() {
|
||||
editableSigns = getBoolean("editable-signs", editableSigns);
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
index a14b8cb98..9a8c5b7f7 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
@@ -2412,6 +2412,24 @@ public class CraftWorld implements World {
|
||||
return persistentRaid.raids.values().stream().map(CraftRaid::new).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
+ // Purpur start
|
||||
+ public boolean isBlockTickEventEnabled() {
|
||||
+ return getHandle().purpurConfig.blockTickEvent;
|
||||
+ }
|
||||
+
|
||||
+ public void setBlockTickEventEnabled(boolean enabled) {
|
||||
+ getHandle().purpurConfig.blockTickEvent = enabled;
|
||||
+ }
|
||||
+
|
||||
+ public boolean isFluidTickEventEnabled() {
|
||||
+ return getHandle().purpurConfig.fluidTickEvent;
|
||||
+ }
|
||||
+
|
||||
+ public void setFluidTickEventEnabled(boolean enabled) {
|
||||
+ getHandle().purpurConfig.fluidTickEvent = enabled;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
// Paper start
|
||||
@Override
|
||||
public CompletableFuture<Chunk> getChunkAtAsync(int x, int z, boolean gen) {
|
||||
--
|
||||
2.24.0
|
||||
|
||||
86
patches/server/0067-Add-getPlacementBlockData-to-World.patch
Normal file
86
patches/server/0067-Add-getPlacementBlockData-to-World.patch
Normal file
@@ -0,0 +1,86 @@
|
||||
From 0f7e6fa3412d4e4d8b62640f63c263c126e53e6c Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
||||
Date: Sat, 8 Feb 2020 23:30:17 -0600
|
||||
Subject: [PATCH] Add getPlacementBlockData to World
|
||||
|
||||
---
|
||||
.../net/minecraft/server/BlockMobSpawner.java | 1 +
|
||||
.../net/minecraft/server/ItemSpawner.java | 23 +++++++++++++++++++
|
||||
src/main/java/net/minecraft/server/Items.java | 2 +-
|
||||
.../org/bukkit/craftbukkit/CraftWorld.java | 5 ++++
|
||||
4 files changed, 30 insertions(+), 1 deletion(-)
|
||||
create mode 100644 src/main/java/net/minecraft/server/ItemSpawner.java
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockMobSpawner.java b/src/main/java/net/minecraft/server/BlockMobSpawner.java
|
||||
index 69d04f6cb..901d45f28 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockMobSpawner.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockMobSpawner.java
|
||||
@@ -57,6 +57,7 @@ public class BlockMobSpawner extends BlockTileEntity {
|
||||
|
||||
@Override
|
||||
public int getExpDrop(IBlockData iblockdata, World world, BlockPosition blockposition, ItemStack itemstack) {
|
||||
+ if (isSilkTouch(itemstack)) return 0; // Purpur
|
||||
int i = 15 + world.random.nextInt(15) + world.random.nextInt(15);
|
||||
|
||||
return i;
|
||||
diff --git a/src/main/java/net/minecraft/server/ItemSpawner.java b/src/main/java/net/minecraft/server/ItemSpawner.java
|
||||
new file mode 100644
|
||||
index 000000000..7dc68ffe9
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/net/minecraft/server/ItemSpawner.java
|
||||
@@ -0,0 +1,23 @@
|
||||
+package net.minecraft.server;
|
||||
+
|
||||
+public class ItemSpawner extends ItemBlock {
|
||||
+ public ItemSpawner(Block block, Info info) {
|
||||
+ super(block, info);
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ protected boolean a(BlockPosition blockposition, World world, EntityHuman entityhuman, ItemStack itemstack, IBlockData iblockdata) {
|
||||
+ boolean handled = super.a(blockposition, world, entityhuman, itemstack, iblockdata);
|
||||
+ if (entityhuman.getBukkitEntity().hasPermission("purpur.place.spawners")) {
|
||||
+ TileEntity spawner = world.getTileEntity(blockposition);
|
||||
+ if (spawner instanceof TileEntityMobSpawner && itemstack.hasTag()) {
|
||||
+ NBTTagCompound tag = itemstack.getTag();
|
||||
+ if (tag.hasKey("Purpur.mob_type")) {
|
||||
+ EntityTypes.getType(tag.getString("Purpur.mob_type")).ifPresent(type ->
|
||||
+ ((TileEntityMobSpawner) spawner).getSpawner().setMobName(type));
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ return handled;
|
||||
+ }
|
||||
+}
|
||||
diff --git a/src/main/java/net/minecraft/server/Items.java b/src/main/java/net/minecraft/server/Items.java
|
||||
index 9c9b93f28..74a722cce 100644
|
||||
--- a/src/main/java/net/minecraft/server/Items.java
|
||||
+++ b/src/main/java/net/minecraft/server/Items.java
|
||||
@@ -155,7 +155,7 @@ public class Items {
|
||||
public static final Item bU = a(Blocks.PURPUR_BLOCK, CreativeModeTab.b);
|
||||
public static final Item bV = a(Blocks.PURPUR_PILLAR, CreativeModeTab.b);
|
||||
public static final Item bW = a(Blocks.PURPUR_STAIRS, CreativeModeTab.b);
|
||||
- public static final Item bX = a(Blocks.SPAWNER);
|
||||
+ public static final Item bX = a(Blocks.SPAWNER, new ItemSpawner(Blocks.SPAWNER, new Item.Info().a(EnumItemRarity.EPIC))); // Purpur
|
||||
public static final Item bY = a(Blocks.OAK_STAIRS, CreativeModeTab.b);
|
||||
public static final Item bZ = a(Blocks.CHEST, CreativeModeTab.c);
|
||||
public static final Item ca = a(Blocks.DIAMOND_ORE, CreativeModeTab.b);
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
index 4ee61f33f..ec552adfd 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
@@ -2417,6 +2417,11 @@ public class CraftWorld implements World {
|
||||
public net.pl3x.purpur.MoonPhase getMoonPhase() {
|
||||
return net.pl3x.purpur.MoonPhase.getPhase(getFullTime() / 24000L);
|
||||
}
|
||||
+
|
||||
+ public BlockData getPlacementBlockData(BlockData blockdata, Location location) {
|
||||
+ IBlockData validData = net.minecraft.server.Block.getValidBlockForPosition(((CraftBlockData) blockdata).getState(), getHandle(), net.minecraft.server.MCUtil.toBlockPosition(location));
|
||||
+ return CraftBlockData.fromData(validData == null ? Blocks.AIR.getBlockData() : validData);
|
||||
+ }
|
||||
// Purpur end
|
||||
|
||||
// Paper start
|
||||
--
|
||||
2.24.0
|
||||
|
||||
110
patches/server/0068-Barrels-have-6-rows.patch
Normal file
110
patches/server/0068-Barrels-have-6-rows.patch
Normal file
@@ -0,0 +1,110 @@
|
||||
From 2cbcadd82bdf15741c93ea7ae76b5b4719d9cd91 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Thu, 23 May 2019 21:50:37 -0500
|
||||
Subject: [PATCH] Barrels have 6 rows
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/ContainerChest.java | 1 +
|
||||
src/main/java/net/minecraft/server/TileEntityBarrel.java | 5 +++--
|
||||
src/main/java/net/pl3x/purpur/PurpurConfig.java | 9 +++++++++
|
||||
.../org/bukkit/craftbukkit/inventory/CraftContainer.java | 5 ++++-
|
||||
4 files changed, 17 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ContainerChest.java b/src/main/java/net/minecraft/server/ContainerChest.java
|
||||
index 0ee6524b8..7d8567b4b 100644
|
||||
--- a/src/main/java/net/minecraft/server/ContainerChest.java
|
||||
+++ b/src/main/java/net/minecraft/server/ContainerChest.java
|
||||
@@ -65,6 +65,7 @@ public class ContainerChest extends Container {
|
||||
return new ContainerChest(Containers.GENERIC_9X3, i, playerinventory, iinventory, 3);
|
||||
}
|
||||
|
||||
+ public static ContainerChest createSixRows(int i, PlayerInventory playerinventory, IInventory iinventory) { return b(i, playerinventory, iinventory); } // Purpur - OBFHELPER
|
||||
public static ContainerChest b(int i, PlayerInventory playerinventory, IInventory iinventory) {
|
||||
return new ContainerChest(Containers.GENERIC_9X6, i, playerinventory, iinventory, 6);
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/TileEntityBarrel.java b/src/main/java/net/minecraft/server/TileEntityBarrel.java
|
||||
index 1e27abbea..d1a3aae91 100644
|
||||
--- a/src/main/java/net/minecraft/server/TileEntityBarrel.java
|
||||
+++ b/src/main/java/net/minecraft/server/TileEntityBarrel.java
|
||||
@@ -54,7 +54,7 @@ public class TileEntityBarrel extends TileEntityLootable {
|
||||
|
||||
private TileEntityBarrel(TileEntityTypes<?> tileentitytypes) {
|
||||
super(tileentitytypes);
|
||||
- this.items = NonNullList.a(27, ItemStack.a);
|
||||
+ this.items = NonNullList.a(net.pl3x.purpur.PurpurConfig.barrelSixRows ? 54 : 27, ItemStack.a); // Purpur
|
||||
}
|
||||
|
||||
public TileEntityBarrel() {
|
||||
@@ -83,7 +83,7 @@ public class TileEntityBarrel extends TileEntityLootable {
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
- return 27;
|
||||
+ return net.pl3x.purpur.PurpurConfig.barrelSixRows ? 54 : 27; // Purpur
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -103,6 +103,7 @@ public class TileEntityBarrel extends TileEntityLootable {
|
||||
|
||||
@Override
|
||||
protected Container createContainer(int i, PlayerInventory playerinventory) {
|
||||
+ if (net.pl3x.purpur.PurpurConfig.barrelSixRows) return ContainerChest.createSixRows(i, playerinventory, this); // Purpur
|
||||
return ContainerChest.a(i, playerinventory, this);
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index 7b2564d4f..6f5341e3e 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -6,6 +6,7 @@ import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.configuration.InvalidConfigurationException;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
+import org.bukkit.event.inventory.InventoryType;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@@ -169,8 +170,16 @@ public class PurpurConfig {
|
||||
fixItemPositionDesync = getBoolean("settings.fix-item-position-desync", fixItemPositionDesync);
|
||||
}
|
||||
|
||||
+ public static boolean barrelSixRows = false;
|
||||
public static boolean slimeBlocksNotPushable = false;
|
||||
private static void blockSettings() {
|
||||
+ if (CONFIG_VERSION < 3) {
|
||||
+ boolean oldValue = getBoolean("settings.barrel.packed-barrels", true);
|
||||
+ set("settings.blocks.barrel.six-rows", oldValue);
|
||||
+ set("settings.packed-barrels", null);
|
||||
+ }
|
||||
+ barrelSixRows = getBoolean("settings.blocks.barrel.six-rows", barrelSixRows);
|
||||
+ InventoryType.BARREL.setDefaultSize(barrelSixRows ? 54 : 27);
|
||||
slimeBlocksNotPushable = getBoolean("settings.blocks.slime.not-movable-by-piston", slimeBlocksNotPushable);
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java
|
||||
index b4a7d982e..afb40a752 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java
|
||||
@@ -155,6 +155,7 @@ public class CraftContainer extends Container {
|
||||
return Containers.GRINDSTONE;
|
||||
case STONECUTTER:
|
||||
return Containers.STONECUTTER;
|
||||
+ case BARREL: return net.pl3x.purpur.PurpurConfig.barrelSixRows ? Containers.GENERIC_9X6 : Containers.GENERIC_9X3; // Purpur
|
||||
default:
|
||||
return Containers.GENERIC_9X3;
|
||||
}
|
||||
@@ -168,8 +169,10 @@ public class CraftContainer extends Container {
|
||||
case PLAYER:
|
||||
case CHEST:
|
||||
case ENDER_CHEST:
|
||||
+ delegate = new ContainerChest(Containers.GENERIC_9X3, windowId, bottom, top, top.getSize() / 9); // Purpur
|
||||
+ break; // Purpur
|
||||
case BARREL:
|
||||
- delegate = new ContainerChest(Containers.GENERIC_9X3, windowId, bottom, top, top.getSize() / 9);
|
||||
+ delegate = new ContainerChest(net.pl3x.purpur.PurpurConfig.barrelSixRows ? Containers.GENERIC_9X6 : Containers.GENERIC_9X3, windowId, bottom, top, top.getSize() / 9); // Purpur
|
||||
break;
|
||||
case DISPENSER:
|
||||
case DROPPER:
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
From 80c9dfe529da583048f1462eb442a48f0f9950ef Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 19 Oct 2019 00:34:43 -0500
|
||||
Subject: [PATCH] Add getPlacementBlockData to World
|
||||
|
||||
---
|
||||
src/main/java/org/bukkit/craftbukkit/CraftWorld.java | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
index 9a8c5b7f7..776ccdd8e 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
@@ -2428,6 +2428,11 @@ public class CraftWorld implements World {
|
||||
public void setFluidTickEventEnabled(boolean enabled) {
|
||||
getHandle().purpurConfig.fluidTickEvent = enabled;
|
||||
}
|
||||
+
|
||||
+ public BlockData getPlacementBlockData(BlockData blockdata, Location location) {
|
||||
+ IBlockData validData = net.minecraft.server.Block.getValidBlockForPosition(((CraftBlockData) blockdata).getState(), getHandle(), net.minecraft.server.MCUtil.toBlockPosition(location));
|
||||
+ return CraftBlockData.fromData(validData == null ? Blocks.AIR.getBlockData() : validData);
|
||||
+ }
|
||||
// Purpur end
|
||||
|
||||
// Paper start
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,30 +1,30 @@
|
||||
From 0cd5138cb769057cb56c2b699fc4b3dfd3933bfa Mon Sep 17 00:00:00 2001
|
||||
From 81b01f1437873f811a0eed0dff01dc5b49971ac0 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sun, 23 Jun 2019 17:01:26 -0500
|
||||
Subject: [PATCH] Add large sized ender chests
|
||||
Subject: [PATCH] Ender chests have 6 rows
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/BlockEnderChest.java | 1 +
|
||||
src/main/java/net/minecraft/server/InventoryEnderChest.java | 2 +-
|
||||
src/main/java/net/pl3x/purpur/PurpurConfig.java | 6 ++++++
|
||||
.../org/bukkit/craftbukkit/inventory/CraftContainer.java | 4 +++-
|
||||
.../org/bukkit/craftbukkit/inventory/CraftContainer.java | 3 ++-
|
||||
.../org/bukkit/craftbukkit/inventory/CraftInventory.java | 2 +-
|
||||
5 files changed, 12 insertions(+), 3 deletions(-)
|
||||
5 files changed, 11 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockEnderChest.java b/src/main/java/net/minecraft/server/BlockEnderChest.java
|
||||
index 0a892a5f1a..c7afac3482 100644
|
||||
index 0a892a5f1..0aede130b 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockEnderChest.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockEnderChest.java
|
||||
@@ -48,6 +48,7 @@ public class BlockEnderChest extends BlockChestAbstract<TileEntityEnderChest> im
|
||||
|
||||
inventoryenderchest.a(tileentityenderchest);
|
||||
entityhuman.openContainer(new TileInventory((i, playerinventory, entityhuman1) -> {
|
||||
+ if (net.pl3x.purpur.PurpurConfig.largeEnderChests) return ContainerChest.b(i, playerinventory, inventoryenderchest); // Purpur
|
||||
+ if (net.pl3x.purpur.PurpurConfig.enderChestSixRows) return ContainerChest.b(i, playerinventory, inventoryenderchest); // Purpur
|
||||
return ContainerChest.a(i, playerinventory, inventoryenderchest);
|
||||
}, BlockEnderChest.e));
|
||||
entityhuman.a(StatisticList.OPEN_ENDERCHEST);
|
||||
diff --git a/src/main/java/net/minecraft/server/InventoryEnderChest.java b/src/main/java/net/minecraft/server/InventoryEnderChest.java
|
||||
index fd31b9a6dc..49b369236d 100644
|
||||
index fd31b9a6d..903c02e9e 100644
|
||||
--- a/src/main/java/net/minecraft/server/InventoryEnderChest.java
|
||||
+++ b/src/main/java/net/minecraft/server/InventoryEnderChest.java
|
||||
@@ -20,7 +20,7 @@ public class InventoryEnderChest extends InventorySubcontainer {
|
||||
@@ -32,51 +32,58 @@ index fd31b9a6dc..49b369236d 100644
|
||||
|
||||
public InventoryEnderChest(EntityHuman owner) {
|
||||
- super(27);
|
||||
+ super(net.pl3x.purpur.PurpurConfig.largeEnderChests ? 54 : 27); // Purpur
|
||||
+ super(net.pl3x.purpur.PurpurConfig.enderChestSixRows ? 54 : 27); // Purpur
|
||||
this.owner = owner;
|
||||
// CraftBukkit end
|
||||
}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index aba4e84117..4c25d358fd 100644
|
||||
index 6f5341e3e..f93bf9981 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -165,6 +165,12 @@ public class PurpurConfig {
|
||||
snowmanPumpkinPutBack = getBoolean("settings.mobs.snow_golem.pumpkin-can-be-added-back", snowmanPumpkinPutBack);
|
||||
}
|
||||
@@ -172,14 +172,20 @@ public class PurpurConfig {
|
||||
|
||||
+ public static boolean largeEnderChests = true;
|
||||
+ private static void largeEnderChests() {
|
||||
+ largeEnderChests = getBoolean("settings.large-ender-chests", largeEnderChests);
|
||||
+ InventoryType.ENDER_CHEST.setDefaultSize(largeEnderChests ? 54 : 27);
|
||||
+ }
|
||||
+
|
||||
public static boolean packedBarrels = true;
|
||||
private static void packedBarrels() {
|
||||
packedBarrels = getBoolean("settings.packed-barrels", packedBarrels);
|
||||
public static boolean barrelSixRows = false;
|
||||
public static boolean slimeBlocksNotPushable = false;
|
||||
+ public static boolean enderChestSixRows = false;
|
||||
private static void blockSettings() {
|
||||
if (CONFIG_VERSION < 3) {
|
||||
boolean oldValue = getBoolean("settings.barrel.packed-barrels", true);
|
||||
set("settings.blocks.barrel.six-rows", oldValue);
|
||||
set("settings.packed-barrels", null);
|
||||
+ oldValue = getBoolean("settings.large-ender-chests", true);
|
||||
+ set("settings.blocks.ender_chest.six-rows", oldValue);
|
||||
+ set("settings.large-ender-chests", null);
|
||||
}
|
||||
barrelSixRows = getBoolean("settings.blocks.barrel.six-rows", barrelSixRows);
|
||||
InventoryType.BARREL.setDefaultSize(barrelSixRows ? 54 : 27);
|
||||
+ enderChestSixRows = getBoolean("settings.blocks.ender_chest.six-rows", enderChestSixRows);
|
||||
+ InventoryType.ENDER_CHEST.setDefaultSize(enderChestSixRows ? 54 : 27);
|
||||
slimeBlocksNotPushable = getBoolean("settings.blocks.slime.not-movable-by-piston", slimeBlocksNotPushable);
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java
|
||||
index 49cc721f5c..a7e3585fc0 100644
|
||||
index afb40a752..7bf1e224a 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java
|
||||
@@ -157,6 +157,8 @@ public class CraftContainer extends Container {
|
||||
@@ -156,6 +156,7 @@ public class CraftContainer extends Container {
|
||||
case STONECUTTER:
|
||||
return Containers.STONECUTTER;
|
||||
case BARREL:
|
||||
return net.pl3x.purpur.PurpurConfig.packedBarrels ? Containers.GENERIC_9X6 : Containers.GENERIC_9X3;
|
||||
+ case ENDER_CHEST:
|
||||
+ return net.pl3x.purpur.PurpurConfig.largeEnderChests ? Containers.GENERIC_9X6 : Containers.GENERIC_9X3;
|
||||
case BARREL: return net.pl3x.purpur.PurpurConfig.barrelSixRows ? Containers.GENERIC_9X6 : Containers.GENERIC_9X3; // Purpur
|
||||
+ case ENDER_CHEST: return net.pl3x.purpur.PurpurConfig.enderChestSixRows ? Containers.GENERIC_9X6 : Containers.GENERIC_9X3; // Purpur
|
||||
default:
|
||||
return Containers.GENERIC_9X3;
|
||||
}
|
||||
@@ -170,7 +172,7 @@ public class CraftContainer extends Container {
|
||||
@@ -169,7 +170,7 @@ public class CraftContainer extends Container {
|
||||
case PLAYER:
|
||||
case CHEST:
|
||||
case ENDER_CHEST:
|
||||
- delegate = new ContainerChest(Containers.GENERIC_9X3, windowId, bottom, top, top.getSize() / 9); // Purpur
|
||||
+ delegate = new ContainerChest(net.pl3x.purpur.PurpurConfig.largeEnderChests ? Containers.GENERIC_9X6 : Containers.GENERIC_9X3, windowId, bottom, top, top.getSize() / 9); // Purpur
|
||||
break;
|
||||
+ delegate = new ContainerChest(net.pl3x.purpur.PurpurConfig.enderChestSixRows ? Containers.GENERIC_9X6 : Containers.GENERIC_9X3, windowId, bottom, top, top.getSize() / 9); // Purpur
|
||||
break; // Purpur
|
||||
case BARREL:
|
||||
delegate = new ContainerChest(net.pl3x.purpur.PurpurConfig.packedBarrels ? Containers.GENERIC_9X6 : Containers.GENERIC_9X3, windowId, bottom, top, top.getSize() / 9); // Purpur
|
||||
delegate = new ContainerChest(net.pl3x.purpur.PurpurConfig.barrelSixRows ? Containers.GENERIC_9X6 : Containers.GENERIC_9X3, windowId, bottom, top, top.getSize() / 9); // Purpur
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java
|
||||
index 026a0c3995..d2c06cff2c 100644
|
||||
index 026a0c399..d2c06cff2 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java
|
||||
@@ -81,7 +81,7 @@ public class CraftInventory implements Inventory {
|
||||
@@ -89,5 +96,5 @@ index 026a0c3995..d2c06cff2c 100644
|
||||
}
|
||||
|
||||
--
|
||||
2.24.0.rc1
|
||||
2.24.0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From 25752071ae4dfe9753154cf61b62d44ace87d503 Mon Sep 17 00:00:00 2001
|
||||
From b43861bba4f3a59fd58f7d28e2274aca6673da08 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sun, 28 Jul 2019 01:27:37 -0500
|
||||
Subject: [PATCH] Add 5 second tps average in /tps
|
||||
@@ -10,7 +10,7 @@ Subject: [PATCH] Add 5 second tps average in /tps
|
||||
3 files changed, 11 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index 587bef915..9d5ef40a0 100644
|
||||
index 39ed2ed61..4d72a59d6 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -177,7 +177,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
||||
@@ -48,11 +48,11 @@ index 587bef915..9d5ef40a0 100644
|
||||
+ recentTps[2] = tps5.getAverage();
|
||||
+ recentTps[3] = tps15.getAverage();
|
||||
+ // Purpur end
|
||||
lagging = recentTps[0] < net.pl3x.purpur.PurpurConfig.laggingThreshold; // Purpur
|
||||
// Paper end
|
||||
lagging = recentTps[0] < net.pl3x.purpur.PurpurConfig.laggingThreshold; // Purpur
|
||||
tickSection = curTime;
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
index 5d324a949..fb0da17ed 100644
|
||||
index fcfb2c1b0..6f52104f6 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -2028,6 +2028,7 @@ public final class CraftServer implements Server {
|
||||
@@ -64,7 +64,7 @@ index 5d324a949..fb0da17ed 100644
|
||||
net.minecraft.server.MinecraftServer.getServer().tps5.getAverage(),
|
||||
net.minecraft.server.MinecraftServer.getServer().tps15.getAverage()
|
||||
diff --git a/src/main/java/org/spigotmc/TicksPerSecondCommand.java b/src/main/java/org/spigotmc/TicksPerSecondCommand.java
|
||||
index 6d21c3269..2eed9d0a4 100644
|
||||
index 5550379a6..96c2f17b7 100644
|
||||
--- a/src/main/java/org/spigotmc/TicksPerSecondCommand.java
|
||||
+++ b/src/main/java/org/spigotmc/TicksPerSecondCommand.java
|
||||
@@ -30,7 +30,7 @@ public class TicksPerSecondCommand extends Command
|
||||
@@ -74,8 +74,8 @@ index 6d21c3269..2eed9d0a4 100644
|
||||
- sender.sendMessage( ChatColor.GOLD + "TPS from last 1m, 5m, 15m: " + org.apache.commons.lang.StringUtils.join(tpsAvg, ", "));
|
||||
+ sender.sendMessage( ChatColor.GOLD + "TPS from last 5s, 1m, 5m, 15m: " + org.apache.commons.lang.StringUtils.join(tpsAvg, ", ")); // Purpur
|
||||
// Paper end
|
||||
|
||||
return true;
|
||||
// Purpur start
|
||||
double avg = org.bukkit.Bukkit.getAverageTickTime();
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
From 08fd7b5ab01c28a2f295ed10394188a885ae1194 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 19 Oct 2019 00:52:12 -0500
|
||||
Subject: [PATCH] Add setting to suppress unknown attribute warnings
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/GenericAttributes.java | 1 +
|
||||
src/main/java/net/pl3x/purpur/PurpurConfig.java | 5 +++++
|
||||
2 files changed, 6 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/GenericAttributes.java b/src/main/java/net/minecraft/server/GenericAttributes.java
|
||||
index 469e293c25..ada17e2bf6 100644
|
||||
--- a/src/main/java/net/minecraft/server/GenericAttributes.java
|
||||
+++ b/src/main/java/net/minecraft/server/GenericAttributes.java
|
||||
@@ -79,6 +79,7 @@ public class GenericAttributes {
|
||||
AttributeInstance attributeinstance = attributemapbase.a(nbttagcompound.getString("Name"));
|
||||
|
||||
if (attributeinstance == null) {
|
||||
+ if (!net.pl3x.purpur.PurpurConfig.suppressUnknownAttributeWarnings) // Purpur
|
||||
GenericAttributes.LOGGER.warn("Ignoring unknown attribute '{}'", nbttagcompound.getString("Name"));
|
||||
} else {
|
||||
a(attributeinstance, nbttagcompound);
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index 306d86d842..af808d0367 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -172,6 +172,11 @@ public class PurpurConfig {
|
||||
useAlternateKeepAlive = getBoolean("settings.use-alternate-keepalive", useAlternateKeepAlive);
|
||||
}
|
||||
|
||||
+ public static boolean suppressUnknownAttributeWarnings = false;
|
||||
+ private static void suppressUnknownAttributeWarnings() {
|
||||
+ suppressUnknownAttributeWarnings = getBoolean("settings.suppress-unknown-attribute-warnings", suppressUnknownAttributeWarnings);
|
||||
+ }
|
||||
+
|
||||
public static boolean updatePermissionsOnWorldChange = false;
|
||||
private static void updatePermissionsOnWorldChange() {
|
||||
updatePermissionsOnWorldChange = getBoolean("settings.update-perms-on-world-change", updatePermissionsOnWorldChange);
|
||||
--
|
||||
2.24.0.rc1
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
From 93a7c26419e0753954529826e3218844e3183a12 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 19 Oct 2019 02:20:45 -0500
|
||||
Subject: [PATCH] Add option to allow iron golems to spawn in air
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityIronGolem.java | 2 +-
|
||||
src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 2 ++
|
||||
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityIronGolem.java b/src/main/java/net/minecraft/server/EntityIronGolem.java
|
||||
index 5414d6975..e71a0af5c 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityIronGolem.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityIronGolem.java
|
||||
@@ -241,7 +241,7 @@ public class EntityIronGolem extends EntityGolem {
|
||||
BlockPosition blockposition1 = blockposition.down();
|
||||
IBlockData iblockdata = iworldreader.getType(blockposition1);
|
||||
|
||||
- if (!iblockdata.a((IBlockAccess) iworldreader, blockposition1, (Entity) this)) {
|
||||
+ if (!iblockdata.a((IBlockAccess) iworldreader, blockposition1, (Entity) this) && !((World) iworldreader).purpurConfig.ironGolemCanSpawnInAir) { // Purpur
|
||||
return false;
|
||||
} else {
|
||||
for (int i = 1; i < 3; ++i) {
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index e71f40a53..d01504127 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -471,11 +471,13 @@ public class PurpurWorldConfig {
|
||||
public boolean ironGolemRidable = false;
|
||||
public boolean ironGolemRidableInWater = false;
|
||||
public boolean ironGolemRequireShiftToMount = true;
|
||||
+ public boolean ironGolemCanSpawnInAir = false;
|
||||
public boolean ironGolemCanSwim = false;
|
||||
private void ironGolemSettings() {
|
||||
ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable);
|
||||
ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater);
|
||||
ironGolemRequireShiftToMount = getBoolean("mobs.iron_golem.require-shift-to-mount", ironGolemRequireShiftToMount);
|
||||
+ ironGolemCanSpawnInAir = getBoolean("mobs.iron_golem.can-spawn-in-air", ironGolemCanSpawnInAir);
|
||||
ironGolemCanSwim = getBoolean("mobs.iron_golem.can-swim", ironGolemCanSwim);
|
||||
}
|
||||
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
From 55c0eb9e453436d84fa0507abd25410a0280f1d1 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 19 Oct 2019 02:20:45 -0500
|
||||
Subject: [PATCH] Add option to allow iron golems to spawn in air
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityIronGolem.java | 2 +-
|
||||
src/main/java/net/pl3x/purpur/PurpurConfig.java | 2 ++
|
||||
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityIronGolem.java b/src/main/java/net/minecraft/server/EntityIronGolem.java
|
||||
index 3054e0435..ffdd19c66 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityIronGolem.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityIronGolem.java
|
||||
@@ -225,7 +225,7 @@ public class EntityIronGolem extends EntityGolem {
|
||||
BlockPosition blockposition1 = blockposition.down();
|
||||
IBlockData iblockdata = iworldreader.getType(blockposition1);
|
||||
|
||||
- if (!iblockdata.a((IBlockAccess) iworldreader, blockposition1, (Entity) this)) {
|
||||
+ if (!iblockdata.a((IBlockAccess) iworldreader, blockposition1, (Entity) this) && !net.pl3x.purpur.PurpurConfig.ironGolemsCanSpawnInAir) { // Purpur
|
||||
return false;
|
||||
} else {
|
||||
for (int i = 1; i < 3; ++i) {
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index 7e06cd044..148fc22ff 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -221,8 +221,10 @@ public class PurpurConfig {
|
||||
}
|
||||
|
||||
public static boolean ironGolemSwims = true;
|
||||
+ public static boolean ironGolemsCanSpawnInAir = false;
|
||||
private static void ironGolemSettings() {
|
||||
ironGolemSwims = getBoolean("settings.mobs.iron_golem.swims", ironGolemSwims);
|
||||
+ ironGolemsCanSpawnInAir = getBoolean("settings.mobs.iron_golem.can-spawn-in-air", ironGolemsCanSpawnInAir);
|
||||
}
|
||||
|
||||
public static double crystalsAttackPhantomsRadius = 0.0D;
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,18 +1,32 @@
|
||||
From 8985b71ba6c91fe873598edf7c55d36769670e59 Mon Sep 17 00:00:00 2001
|
||||
From e0153bfed69259bc393748cb503ed4aa31bbcff3 Mon Sep 17 00:00:00 2001
|
||||
From: Tom <cryptite@gmail.com>
|
||||
Date: Fri, 12 Jul 2019 07:59:35 -0500
|
||||
Subject: [PATCH] Don't recalculate permissions for players on world change
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/PlayerList.java | 6 +++++-
|
||||
src/main/java/net/minecraft/server/PlayerList.java | 9 +++++----
|
||||
src/main/java/net/pl3x/purpur/PurpurConfig.java | 5 +++++
|
||||
2 files changed, 10 insertions(+), 1 deletion(-)
|
||||
2 files changed, 10 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
|
||||
index 7b79ee4fe..2763dab47 100644
|
||||
index 7b79ee4fe..397531239 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerList.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerList.java
|
||||
@@ -712,7 +712,9 @@ public abstract class PlayerList {
|
||||
@@ -32,13 +32,10 @@ import org.bukkit.Location;
|
||||
import org.bukkit.craftbukkit.util.CraftChatMessage;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.player.PlayerChangedWorldEvent;
|
||||
-import org.bukkit.event.player.PlayerPortalEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerLoginEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||
-import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
||||
-import org.bukkit.util.Vector;
|
||||
import org.spigotmc.event.player.PlayerSpawnLocationEvent;
|
||||
// CraftBukkit end
|
||||
|
||||
@@ -712,7 +709,9 @@ public abstract class PlayerList {
|
||||
entityplayer1.playerConnection.sendPacket(new PacketPlayOutServerDifficulty(worlddata.getDifficulty(), worlddata.isDifficultyLocked()));
|
||||
entityplayer1.playerConnection.sendPacket(new PacketPlayOutExperience(entityplayer1.exp, entityplayer1.expTotal, entityplayer1.expLevel));
|
||||
this.a(entityplayer1, worldserver);
|
||||
@@ -22,12 +36,12 @@ index 7b79ee4fe..2763dab47 100644
|
||||
if (!entityplayer.playerConnection.isDisconnected()) {
|
||||
worldserver.addPlayerRespawn(entityplayer1);
|
||||
this.players.add(entityplayer1);
|
||||
@@ -907,10 +909,12 @@ public abstract class PlayerList {
|
||||
@@ -907,10 +906,12 @@ public abstract class PlayerList {
|
||||
entityplayer.playerConnection.sendPacket(new PacketPlayOutEntityStatus(entityplayer, b0));
|
||||
}
|
||||
|
||||
- entityplayer.getBukkitEntity().recalculatePermissions(); // CraftBukkit
|
||||
+ if (!(movedToWorld && !net.pl3x.purpur.PurpurConfig.updatePermissionsOnWorldChange)) entityplayer.getBukkitEntity().recalculatePermissions(); // CraftBukkit // Purpur
|
||||
+ if (!(movedToWorld && !net.pl3x.purpur.PurpurConfig.recalculatePermsOnWorldChange)) entityplayer.getBukkitEntity().recalculatePermissions(); // CraftBukkit // Purpur
|
||||
this.server.getCommandDispatcher().a(entityplayer);
|
||||
}
|
||||
|
||||
@@ -37,21 +51,19 @@ index 7b79ee4fe..2763dab47 100644
|
||||
public boolean isWhitelisted(GameProfile gameprofile) {
|
||||
return isWhitelisted(gameprofile, null);
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
index c35d19f66..12b2e1211 100644
|
||||
index f93bf9981..5416c45d7 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java
|
||||
@@ -166,6 +166,11 @@ public class PurpurConfig {
|
||||
useBetterMending = getBoolean("settings.use-better-mending", useBetterMending);
|
||||
@@ -188,4 +188,9 @@ public class PurpurConfig {
|
||||
InventoryType.ENDER_CHEST.setDefaultSize(enderChestSixRows ? 54 : 27);
|
||||
slimeBlocksNotPushable = getBoolean("settings.blocks.slime.not-movable-by-piston", slimeBlocksNotPushable);
|
||||
}
|
||||
|
||||
+ public static boolean updatePermissionsOnWorldChange = false;
|
||||
+ private static void updatePermissionsOnWorldChange() {
|
||||
+ updatePermissionsOnWorldChange = getBoolean("settings.update-perms-on-world-change", updatePermissionsOnWorldChange);
|
||||
+ }
|
||||
+
|
||||
public static boolean requireShiftToMount = true;
|
||||
private static void requireShiftToMount() {
|
||||
requireShiftToMount = getBoolean("settings.mobs.require-shift-to-mount", requireShiftToMount);
|
||||
+ public static boolean recalculatePermsOnWorldChange = true;
|
||||
+ private static void updatePermissionsOnWorldChange() {
|
||||
+ recalculatePermsOnWorldChange = getBoolean("settings.recalculate-perms-on-world-change", recalculatePermsOnWorldChange);
|
||||
+ }
|
||||
}
|
||||
--
|
||||
2.24.0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From 5e6941ddcd9149cf40509ad0d63795411de96112 Mon Sep 17 00:00:00 2001
|
||||
From ab693decd5209d531220f77d401c926ce77bfaa1 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 19 Oct 2019 02:25:16 -0500
|
||||
Subject: [PATCH] Add playPickupItemAnimation to LivingEntity
|
||||
@@ -8,12 +8,12 @@ Subject: [PATCH] Add playPickupItemAnimation to LivingEntity
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||||
index e408c89220..572d21b349 100644
|
||||
index 8980a12eb..de1b72afa 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||||
@@ -747,5 +747,10 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
((EntityInsentient) getHandle()).getControllerJump().jump();
|
||||
}
|
||||
@@ -738,5 +738,10 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
public void setSafeFallDistance(float safeFallDistance) {
|
||||
getHandle().safeFallDistance = safeFallDistance;
|
||||
}
|
||||
+
|
||||
+ @Override
|
||||
@@ -23,5 +23,5 @@ index e408c89220..572d21b349 100644
|
||||
// Purpur end
|
||||
}
|
||||
--
|
||||
2.24.0.rc1
|
||||
2.24.0
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From 47c58f252b1b581c205adf393344b7af163e8eb1 Mon Sep 17 00:00:00 2001
|
||||
From 351644ab476b76cfd1809e629fb933db9244bc29 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 19 Oct 2019 00:29:02 -0500
|
||||
Subject: [PATCH] Add more evoker API
|
||||
@@ -9,10 +9,10 @@ Subject: [PATCH] Add more evoker API
|
||||
2 files changed, 17 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityEvoker.java b/src/main/java/net/minecraft/server/EntityEvoker.java
|
||||
index e60a42829..e3c80ad3f 100644
|
||||
index a3d8b9974..53a3829ac 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityEvoker.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityEvoker.java
|
||||
@@ -86,12 +86,14 @@ public class EntityEvoker extends EntityIllagerWizard {
|
||||
@@ -102,12 +102,14 @@ public class EntityEvoker extends EntityIllagerWizard {
|
||||
return SoundEffects.ENTITY_EVOKER_HURT;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From d3357fd01e1481c19ebb6d92e9e8d4dd327af6d4 Mon Sep 17 00:00:00 2001
|
||||
From 7486ebdd8e6b6b960484381a2d64ebd059d78f8d Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Mon, 7 Oct 2019 00:15:37 -0500
|
||||
Subject: [PATCH] Add API for Villager#resetOffers()
|
||||
@@ -9,7 +9,7 @@ Subject: [PATCH] Add API for Villager#resetOffers()
|
||||
2 files changed, 15 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityVillagerAbstract.java b/src/main/java/net/minecraft/server/EntityVillagerAbstract.java
|
||||
index 9b75c67c72..ddd19aa2f9 100644
|
||||
index 9b75c67c7..ddd19aa2f 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityVillagerAbstract.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityVillagerAbstract.java
|
||||
@@ -82,6 +82,13 @@ public abstract class EntityVillagerAbstract extends EntityAgeable implements NP
|
||||
@@ -35,7 +35,7 @@ index 9b75c67c72..ddd19aa2f9 100644
|
||||
|
||||
protected void a(MerchantRecipeList merchantrecipelist, VillagerTrades.IMerchantRecipeOption[] avillagertrades_imerchantrecipeoption, int i) {
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
|
||||
index a73ebaa75f..ac89ed9377 100644
|
||||
index a73ebaa75..ac89ed937 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
|
||||
@@ -112,4 +112,11 @@ public class CraftVillager extends CraftAbstractVillager implements Villager {
|
||||
@@ -51,5 +51,5 @@ index a73ebaa75f..ac89ed9377 100644
|
||||
+ // Purpur end
|
||||
}
|
||||
--
|
||||
2.24.0.rc1
|
||||
2.24.0
|
||||
|
||||
@@ -1,17 +1,16 @@
|
||||
From cb0af57ced6d7902fc27ec8c692f4918d5448c73 Mon Sep 17 00:00:00 2001
|
||||
From 39cc6eaea00d00289f8d3dc8e52478b6f7c6f101 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Fri, 18 Oct 2019 22:50:12 -0500
|
||||
Subject: [PATCH] Add more llama API
|
||||
|
||||
---
|
||||
.../net/minecraft/server/EntityLlama.java | 19 +++++---
|
||||
.../minecraft/server/EntityLlamaTrader.java | 4 +-
|
||||
.../net/minecraft/server/EntityLlama.java | 18 ++++++--
|
||||
.../server/PathfinderGoalLlamaFollow.java | 4 +-
|
||||
.../bukkit/craftbukkit/entity/CraftLlama.java | 44 +++++++++++++++++++
|
||||
4 files changed, 63 insertions(+), 8 deletions(-)
|
||||
3 files changed, 61 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLlama.java b/src/main/java/net/minecraft/server/EntityLlama.java
|
||||
index 8d14c1817..03424ccf2 100644
|
||||
index 5b87b245f..00334993f 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLlama.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLlama.java
|
||||
@@ -12,7 +12,8 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn
|
||||
@@ -19,12 +18,12 @@ index 8d14c1817..03424ccf2 100644
|
||||
private EntityLlama bJ;
|
||||
@Nullable
|
||||
- private EntityLlama bK;
|
||||
+ private EntityLlama bK; @Nullable public EntityLlama getCaravanTail() { return bK; } // Purpur - OBFHELPER
|
||||
+ private EntityLlama bK; public EntityLlama getCaravanTail() { return bK; } // Purpur - OBFHELPER
|
||||
+ public boolean shouldJoinCaravan = true; // Purpur
|
||||
|
||||
public EntityLlama(EntityTypes<? extends EntityLlama> entitytypes, World world) {
|
||||
super(entitytypes, world);
|
||||
@@ -63,7 +64,7 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn
|
||||
@@ -69,7 +70,7 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn
|
||||
if (!this.inventoryChest.getItem(1).isEmpty()) {
|
||||
nbttagcompound.set("DecorItem", this.inventoryChest.getItem(1).save(new NBTTagCompound()));
|
||||
}
|
||||
@@ -33,7 +32,7 @@ index 8d14c1817..03424ccf2 100644
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -74,7 +75,11 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn
|
||||
@@ -80,7 +81,11 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn
|
||||
if (nbttagcompound.hasKeyOfType("DecorItem", 10)) {
|
||||
this.inventoryChest.setItem(1, ItemStack.a(nbttagcompound.getCompound("DecorItem")));
|
||||
}
|
||||
@@ -46,7 +45,7 @@ index 8d14c1817..03424ccf2 100644
|
||||
this.eI();
|
||||
}
|
||||
|
||||
@@ -411,19 +416,24 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn
|
||||
@@ -417,19 +422,24 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,31 +70,15 @@ index 8d14c1817..03424ccf2 100644
|
||||
public boolean fc() {
|
||||
return this.bK != null;
|
||||
}
|
||||
@@ -433,8 +443,7 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn
|
||||
return this.bJ != null;
|
||||
@@ -440,7 +450,7 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn
|
||||
}
|
||||
|
||||
- @Nullable
|
||||
@Nullable
|
||||
- public EntityLlama fe() {
|
||||
+ public EntityLlama getCaravanHead() { return fe(); } @Nullable public EntityLlama fe() { // Purpur - OBFHELPER
|
||||
+ public EntityLlama fe() { return getCaravanHead(); } public EntityLlama getCaravanHead() { // Purpur - OBFHELPER
|
||||
return this.bJ;
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLlamaTrader.java b/src/main/java/net/minecraft/server/EntityLlamaTrader.java
|
||||
index f8129ef10..c714b387c 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLlamaTrader.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLlamaTrader.java
|
||||
@@ -81,8 +81,8 @@ public class EntityLlamaTrader extends EntityLlama {
|
||||
}
|
||||
|
||||
// Purpur start
|
||||
- public boolean isSaddled() { return eq(); } // Purpur - OBFHELPER
|
||||
- @Override public boolean eq() {
|
||||
+ public boolean isSaddled() { return eL(); } // Purpur - OBFHELPER
|
||||
+ @Override public boolean eL() {
|
||||
return isTamed();
|
||||
}
|
||||
// Purpur end
|
||||
diff --git a/src/main/java/net/minecraft/server/PathfinderGoalLlamaFollow.java b/src/main/java/net/minecraft/server/PathfinderGoalLlamaFollow.java
|
||||
index e181d8350..8376f1dc4 100644
|
||||
--- a/src/main/java/net/minecraft/server/PathfinderGoalLlamaFollow.java
|
||||
@@ -1,32 +0,0 @@
|
||||
From b7c9459f996473f158443a5ba5879e5959add149 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 19 Oct 2019 03:28:06 -0500
|
||||
Subject: [PATCH] Add ThrownEggHatchEvent
|
||||
|
||||
---
|
||||
src/main/java/net/minecraft/server/EntityEgg.java | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityEgg.java b/src/main/java/net/minecraft/server/EntityEgg.java
|
||||
index 970f9109d9..a6212dc597 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityEgg.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityEgg.java
|
||||
@@ -52,6 +52,15 @@ public class EntityEgg extends EntityProjectileThrowable {
|
||||
hatchingType = event.getHatchingType();
|
||||
}
|
||||
|
||||
+ // Purpur start
|
||||
+ net.pl3x.purpur.event.entity.ThrownEggHatchEvent event = new net.pl3x.purpur.event.entity.ThrownEggHatchEvent((org.bukkit.entity.Egg) getBukkitEntity(), hatching, b0, hatchingType);
|
||||
+ event.callEvent();
|
||||
+
|
||||
+ b0 = event.getNumHatches();
|
||||
+ hatching = event.isHatching();
|
||||
+ hatchingType = event.getHatchingType();
|
||||
+ // Purpur end
|
||||
+
|
||||
if (hatching) {
|
||||
for (int i = 0; i < b0; ++i) {
|
||||
Entity entity = world.getWorld().createEntity(new org.bukkit.Location(world.getWorld(), this.locX(), this.locY(), this.locZ(), this.yaw, 0.0F), hatchingType.getEntityClass());
|
||||
--
|
||||
2.24.0.rc1
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From 68e5c7525982d7ba1be5c8c613aa0038d08972de Mon Sep 17 00:00:00 2001
|
||||
From c3947a742f1f0a5ef4ee25c84d96210af0a4fd1d Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||
Date: Sat, 19 Oct 2019 03:36:52 -0500
|
||||
Subject: [PATCH] Fix furnace cook speed multiplier using values between 0 and
|
||||
@@ -9,7 +9,7 @@ Subject: [PATCH] Fix furnace cook speed multiplier using values between 0 and
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/TileEntityFurnace.java b/src/main/java/net/minecraft/server/TileEntityFurnace.java
|
||||
index 04849c3da6..ff153003b1 100644
|
||||
index d5432bfeb..91ef7ac60 100644
|
||||
--- a/src/main/java/net/minecraft/server/TileEntityFurnace.java
|
||||
+++ b/src/main/java/net/minecraft/server/TileEntityFurnace.java
|
||||
@@ -291,8 +291,10 @@ public abstract class TileEntityFurnace extends TileEntityContainer implements I
|
||||
@@ -26,5 +26,5 @@ index 04849c3da6..ff153003b1 100644
|
||||
this.cookTimeTotal = this.getRecipeCookingTime();
|
||||
this.burn(irecipe);
|
||||
--
|
||||
2.24.0.rc1
|
||||
2.24.0
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user