From 03ff10484958987e7556e0d6e7ee6ed4afbc5fba Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Mon, 28 Jul 2014 03:00:45 -0500 Subject: [PATCH] Update from upstream SpigotMC Allow Attribute Capping. SpigotMC/Spigot@fb3a9d38dd217e9f354f02352789991996bd44e1 Fix unit tests (broken in the above) SpigotMC/Spigot@1e98f1161f8695f898777e0dfcf179e81cc52f60 Update attribute maxes again once loaded SpigotMC/Spigot@2bf4481e15197e7846ddd249bddc61b542eb8778 --- CraftBukkit-Patches/0002-mc-dev-imports.patch | 162 +++++++++++++++++- .../0167-Allow-Attribute-Capping.patch | 74 ++++++++ 2 files changed, 234 insertions(+), 2 deletions(-) create mode 100644 CraftBukkit-Patches/0167-Allow-Attribute-Capping.patch diff --git a/CraftBukkit-Patches/0002-mc-dev-imports.patch b/CraftBukkit-Patches/0002-mc-dev-imports.patch index 6fc512d2c..f394fd23f 100644 --- a/CraftBukkit-Patches/0002-mc-dev-imports.patch +++ b/CraftBukkit-Patches/0002-mc-dev-imports.patch @@ -1,4 +1,4 @@ -From 7d7028eccdbe9281dbfcc7d294d4ba650acc0ae1 Mon Sep 17 00:00:00 2001 +From a615a6adb52d72e718f4d493dd4436a0a2678ff9 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 1 Dec 2013 15:10:48 +1100 Subject: [PATCH] mc-dev imports @@ -23,6 +23,54 @@ index 6aeffa8..3c0cdff 100644 +diff --git a/src/main/java/net/minecraft/server/AttributeRanged.java b/src/main/java/net/minecraft/server/AttributeRanged.java +new file mode 100644 +index 0000000..d424f04 +--- /dev/null ++++ b/src/main/java/net/minecraft/server/AttributeRanged.java +@@ -0,0 +1,42 @@ ++package net.minecraft.server; ++ ++public class AttributeRanged extends AttributeBase { ++ ++ private final double a; ++ private final double b; ++ private String c; ++ ++ public AttributeRanged(String s, double d0, double d1, double d2) { ++ super(s, d0); ++ this.a = d1; ++ this.b = d2; ++ if (d1 > d2) { ++ throw new IllegalArgumentException("Minimum value cannot be bigger than maximum value!"); ++ } else if (d0 < d1) { ++ throw new IllegalArgumentException("Default value cannot be lower than minimum value!"); ++ } else if (d0 > d2) { ++ throw new IllegalArgumentException("Default value cannot be bigger than maximum value!"); ++ } ++ } ++ ++ public AttributeRanged a(String s) { ++ this.c = s; ++ return this; ++ } ++ ++ public String f() { ++ return this.c; ++ } ++ ++ public double a(double d0) { ++ if (d0 < this.a) { ++ d0 = this.a; ++ } ++ ++ if (d0 > this.b) { ++ d0 = this.b; ++ } ++ ++ return d0; ++ } ++} diff --git a/src/main/java/net/minecraft/server/BanEntrySerializer.java b/src/main/java/net/minecraft/server/BanEntrySerializer.java new file mode 100644 index 0000000..3b4b596 @@ -1347,6 +1395,117 @@ index 0000000..2943244 + } + } +} +diff --git a/src/main/java/net/minecraft/server/GenericAttributes.java b/src/main/java/net/minecraft/server/GenericAttributes.java +new file mode 100644 +index 0000000..6202bba +--- /dev/null ++++ b/src/main/java/net/minecraft/server/GenericAttributes.java +@@ -0,0 +1,105 @@ ++package net.minecraft.server; ++ ++import java.util.Collection; ++import java.util.Iterator; ++import java.util.UUID; ++ ++import org.apache.logging.log4j.LogManager; ++import org.apache.logging.log4j.Logger; ++ ++public class GenericAttributes { ++ ++ private static final Logger f = LogManager.getLogger(); ++ public static final IAttribute maxHealth = (new AttributeRanged("generic.maxHealth", 20.0D, 0.0D, Double.MAX_VALUE)).a("Max Health").a(true); ++ public static final IAttribute b = (new AttributeRanged("generic.followRange", 32.0D, 0.0D, 2048.0D)).a("Follow Range"); ++ public static final IAttribute c = (new AttributeRanged("generic.knockbackResistance", 0.0D, 0.0D, 1.0D)).a("Knockback Resistance"); ++ public static final IAttribute d = (new AttributeRanged("generic.movementSpeed", 0.699999988079071D, 0.0D, Double.MAX_VALUE)).a("Movement Speed").a(true); ++ public static final IAttribute e = new AttributeRanged("generic.attackDamage", 2.0D, 0.0D, Double.MAX_VALUE); ++ ++ public static NBTTagList a(AttributeMapBase attributemapbase) { ++ NBTTagList nbttaglist = new NBTTagList(); ++ Iterator iterator = attributemapbase.a().iterator(); ++ ++ while (iterator.hasNext()) { ++ AttributeInstance attributeinstance = (AttributeInstance) iterator.next(); ++ ++ nbttaglist.add(a(attributeinstance)); ++ } ++ ++ return nbttaglist; ++ } ++ ++ private static NBTTagCompound a(AttributeInstance attributeinstance) { ++ NBTTagCompound nbttagcompound = new NBTTagCompound(); ++ IAttribute iattribute = attributeinstance.getAttribute(); ++ ++ nbttagcompound.setString("Name", iattribute.getName()); ++ nbttagcompound.setDouble("Base", attributeinstance.b()); ++ Collection collection = attributeinstance.c(); ++ ++ if (collection != null && !collection.isEmpty()) { ++ NBTTagList nbttaglist = new NBTTagList(); ++ Iterator iterator = collection.iterator(); ++ ++ while (iterator.hasNext()) { ++ AttributeModifier attributemodifier = (AttributeModifier) iterator.next(); ++ ++ if (attributemodifier.e()) { ++ nbttaglist.add(a(attributemodifier)); ++ } ++ } ++ ++ nbttagcompound.set("Modifiers", nbttaglist); ++ } ++ ++ return nbttagcompound; ++ } ++ ++ private static NBTTagCompound a(AttributeModifier attributemodifier) { ++ NBTTagCompound nbttagcompound = new NBTTagCompound(); ++ ++ nbttagcompound.setString("Name", attributemodifier.b()); ++ nbttagcompound.setDouble("Amount", attributemodifier.d()); ++ nbttagcompound.setInt("Operation", attributemodifier.c()); ++ nbttagcompound.setLong("UUIDMost", attributemodifier.a().getMostSignificantBits()); ++ nbttagcompound.setLong("UUIDLeast", attributemodifier.a().getLeastSignificantBits()); ++ return nbttagcompound; ++ } ++ ++ public static void a(AttributeMapBase attributemapbase, NBTTagList nbttaglist) { ++ for (int i = 0; i < nbttaglist.size(); ++i) { ++ NBTTagCompound nbttagcompound = nbttaglist.get(i); ++ AttributeInstance attributeinstance = attributemapbase.a(nbttagcompound.getString("Name")); ++ ++ if (attributeinstance != null) { ++ a(attributeinstance, nbttagcompound); ++ } else { ++ f.warn("Ignoring unknown attribute \'" + nbttagcompound.getString("Name") + "\'"); ++ } ++ } ++ } ++ ++ private static void a(AttributeInstance attributeinstance, NBTTagCompound nbttagcompound) { ++ attributeinstance.setValue(nbttagcompound.getDouble("Base")); ++ if (nbttagcompound.hasKeyOfType("Modifiers", 9)) { ++ NBTTagList nbttaglist = nbttagcompound.getList("Modifiers", 10); ++ ++ for (int i = 0; i < nbttaglist.size(); ++i) { ++ AttributeModifier attributemodifier = a(nbttaglist.get(i)); ++ AttributeModifier attributemodifier1 = attributeinstance.a(attributemodifier.a()); ++ ++ if (attributemodifier1 != null) { ++ attributeinstance.b(attributemodifier1); ++ } ++ ++ attributeinstance.a(attributemodifier); ++ } ++ } ++ } ++ ++ public static AttributeModifier a(NBTTagCompound nbttagcompound) { ++ UUID uuid = new UUID(nbttagcompound.getLong("UUIDMost"), nbttagcompound.getLong("UUIDLeast")); ++ ++ return new AttributeModifier(uuid, nbttagcompound.getString("Name"), nbttagcompound.getDouble("Amount"), nbttagcompound.getInt("Operation")); ++ } ++} diff --git a/src/main/java/net/minecraft/server/IntCache.java b/src/main/java/net/minecraft/server/IntCache.java new file mode 100644 index 0000000..9858720 @@ -3876,4 +4035,3 @@ HcmV?d00001 -- 1.9.1 - diff --git a/CraftBukkit-Patches/0167-Allow-Attribute-Capping.patch b/CraftBukkit-Patches/0167-Allow-Attribute-Capping.patch new file mode 100644 index 000000000..8be6f82fe --- /dev/null +++ b/CraftBukkit-Patches/0167-Allow-Attribute-Capping.patch @@ -0,0 +1,74 @@ +From e53a899917aeaa613ad54fa0dafafe830971eed6 Mon Sep 17 00:00:00 2001 +From: md_5 +Date: Mon, 28 Jul 2014 16:55:51 +1000 +Subject: [PATCH] Allow Attribute Capping. + +Apply some sensible defaults and allow server owners to customize the maximum values of selected common attributes. + +diff --git a/src/main/java/net/minecraft/server/AttributeRanged.java b/src/main/java/net/minecraft/server/AttributeRanged.java +index d424f04..cd613d2 100644 +--- a/src/main/java/net/minecraft/server/AttributeRanged.java ++++ b/src/main/java/net/minecraft/server/AttributeRanged.java +@@ -3,7 +3,7 @@ package net.minecraft.server; + public class AttributeRanged extends AttributeBase { + + private final double a; +- private final double b; ++ public double b; // Spigot + private String c; + + public AttributeRanged(String s, double d0, double d1, double d2) { +diff --git a/src/main/java/net/minecraft/server/GenericAttributes.java b/src/main/java/net/minecraft/server/GenericAttributes.java +index 6202bba..70b60ac 100644 +--- a/src/main/java/net/minecraft/server/GenericAttributes.java ++++ b/src/main/java/net/minecraft/server/GenericAttributes.java +@@ -10,11 +10,13 @@ import org.apache.logging.log4j.Logger; + public class GenericAttributes { + + private static final Logger f = LogManager.getLogger(); +- public static final IAttribute maxHealth = (new AttributeRanged("generic.maxHealth", 20.0D, 0.0D, Double.MAX_VALUE)).a("Max Health").a(true); ++ // Spigot Start ++ public static final IAttribute maxHealth = (new AttributeRanged("generic.maxHealth", 20.0D, 0.0D, org.spigotmc.SpigotConfig.maxHealth)).a("Max Health").a(true); + public static final IAttribute b = (new AttributeRanged("generic.followRange", 32.0D, 0.0D, 2048.0D)).a("Follow Range"); + public static final IAttribute c = (new AttributeRanged("generic.knockbackResistance", 0.0D, 0.0D, 1.0D)).a("Knockback Resistance"); +- public static final IAttribute d = (new AttributeRanged("generic.movementSpeed", 0.699999988079071D, 0.0D, Double.MAX_VALUE)).a("Movement Speed").a(true); +- public static final IAttribute e = new AttributeRanged("generic.attackDamage", 2.0D, 0.0D, Double.MAX_VALUE); ++ public static final IAttribute d = (new AttributeRanged("generic.movementSpeed", 0.699999988079071D, 0.0D, org.spigotmc.SpigotConfig.movementSpeed)).a("Movement Speed").a(true); ++ public static final IAttribute e = new AttributeRanged("generic.attackDamage", 2.0D, 0.0D, org.spigotmc.SpigotConfig.attackDamage); ++ // Spigot End + + public static NBTTagList a(AttributeMapBase attributemapbase) { + NBTTagList nbttaglist = new NBTTagList(); +diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java +index 0a63291..4ceeab6 100644 +--- a/src/main/java/org/spigotmc/SpigotConfig.java ++++ b/src/main/java/org/spigotmc/SpigotConfig.java +@@ -13,6 +13,8 @@ import java.util.List; + import java.util.Map; + import java.util.Set; + import java.util.logging.Level; ++import net.minecraft.server.AttributeRanged; ++import net.minecraft.server.GenericAttributes; + import net.minecraft.util.gnu.trove.map.hash.TObjectIntHashMap; + import net.minecraft.server.MinecraftServer; + import org.bukkit.Bukkit; +@@ -345,4 +347,17 @@ public class SpigotConfig + { + movedTooQuicklyThreshold = getDouble( "settings.moved-too-quickly-threshold", 100.0D ); + } ++ ++ public static double maxHealth = 2048; ++ public static double movementSpeed = 2048; ++ public static double attackDamage = 2048; ++ private static void attributeMaxes() ++ { ++ maxHealth = getDouble( "settings.attribute.maxHealth.max", maxHealth ); ++ ( (AttributeRanged) GenericAttributes.maxHealth ).b = maxHealth; ++ movementSpeed = getDouble( "settings.attribute.movementSpeed.max", movementSpeed ); ++ ( (AttributeRanged) GenericAttributes.d ).b = movementSpeed; ++ attackDamage = getDouble( "settings.attribute.attackDamage.max", attackDamage ); ++ ( (AttributeRanged) GenericAttributes.e ).b = attackDamage; ++ } + } +-- +1.9.1