Update from upstream SpigotMC
Merge the max health attribute patch into the previous one SpigotMC/Spigot@8d45fe7f77 Filter attribute modifiers which cause the attribute to go out of its range SpigotMC/Spigot@463a1eb595
This commit is contained in:
@@ -28,7 +28,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
private static final Logger f = LogManager.getLogger();
|
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 maxHealth = (new AttributeRanged("generic.maxHealth", 20.0D, 0.0D, Double.MAX_VALUE)).a("Max Health").a(true);
|
||||||
+ // Spigot Start
|
+ // 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 maxHealth = (new AttributeRanged("generic.maxHealth", 20.0D, 0.1D, org.spigotmc.SpigotConfig.maxHealth)).a("Max Health").a(true); // Spigot
|
||||||
public static final IAttribute b = (new AttributeRanged("generic.followRange", 32.0D, 0.0D, 2048.0D)).a("Follow Range");
|
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 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 d = (new AttributeRanged("generic.movementSpeed", 0.699999988079071D, 0.0D, Double.MAX_VALUE)).a("Movement Speed").a(true);
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Thinkofdeath <thinkofdeath@spigotmc.org>
|
|
||||||
Date: Mon, 28 Jul 2014 23:15:00 +0100
|
|
||||||
Subject: [PATCH] Set the minimum max health attribute value to 0.1
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/GenericAttributes.java b/src/main/java/net/minecraft/server/GenericAttributes.java
|
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
||||||
--- a/src/main/java/net/minecraft/server/GenericAttributes.java
|
|
||||||
+++ b/src/main/java/net/minecraft/server/GenericAttributes.java
|
|
||||||
@@ -0,0 +0,0 @@ public class GenericAttributes {
|
|
||||||
|
|
||||||
private static final Logger f = LogManager.getLogger();
|
|
||||||
// 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 maxHealth = (new AttributeRanged("generic.maxHealth", 20.0D, 0.1D, org.spigotmc.SpigotConfig.maxHealth)).a("Max Health").a(true); // Spigot
|
|
||||||
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, org.spigotmc.SpigotConfig.movementSpeed)).a("Movement Speed").a(true);
|
|
||||||
--
|
|
||||||
@@ -16,7 +16,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||||
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
|
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
|
||||||
|
|
||||||
OfflinePlayer result = getPlayerExact(name);
|
OfflinePlayer result = getPlayerExact(name);
|
||||||
if (result == null) {
|
if (result == null) {
|
||||||
- // This is potentially blocking :(
|
- // This is potentially blocking :(
|
||||||
@@ -0,0 +1,145 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Thinkofdeath <thinkofdeath@spigotmc.org>
|
||||||
|
Date: Thu, 31 Jul 2014 17:48:20 +0100
|
||||||
|
Subject: [PATCH] Filter attribute modifiers which cause the attribute to go
|
||||||
|
out of its range
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
|
||||||
|
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
|
||||||
|
@@ -0,0 +0,0 @@ import com.google.common.collect.ImmutableMap;
|
||||||
|
|
||||||
|
// Spigot start
|
||||||
|
import static org.spigotmc.ValidateUtils.*;
|
||||||
|
+import net.minecraft.server.GenericAttributes;
|
||||||
|
+import net.minecraft.server.IAttribute;
|
||||||
|
// Spigot end
|
||||||
|
|
||||||
|
/**
|
||||||
|
@@ -0,0 +0,0 @@ class CraftMetaItem implements ItemMeta, Repairable {
|
||||||
|
NBTTagList save = null;
|
||||||
|
NBTTagList nbttaglist = tag.getList(ATTRIBUTES.NBT, 10);
|
||||||
|
|
||||||
|
+ // Spigot start
|
||||||
|
+ net.minecraft.util.gnu.trove.map.hash.TObjectDoubleHashMap<String> attributeTracker = new net.minecraft.util.gnu.trove.map.hash.TObjectDoubleHashMap<String>();
|
||||||
|
+ net.minecraft.util.gnu.trove.map.hash.TObjectDoubleHashMap<String> attributeTrackerX = new net.minecraft.util.gnu.trove.map.hash.TObjectDoubleHashMap<String>();
|
||||||
|
+ Map<String, IAttribute> attributesByName = new HashMap<String, IAttribute>();
|
||||||
|
+ attributeTracker.put( "generic.maxHealth", 20.0 );
|
||||||
|
+ attributesByName.put( "generic.maxHealth", GenericAttributes.maxHealth );
|
||||||
|
+ attributeTracker.put( "generic.followRange", 32.0 );
|
||||||
|
+ attributesByName.put( "generic.followRange", GenericAttributes.b );
|
||||||
|
+ attributeTracker.put( "generic.knockbackResistance", 0.0 );
|
||||||
|
+ attributesByName.put( "generic.knockbackResistance", GenericAttributes.c );
|
||||||
|
+ attributeTracker.put( "generic.movementSpeed", 0.7 );
|
||||||
|
+ attributesByName.put( "generic.movementSpeed", GenericAttributes.d );
|
||||||
|
+ attributeTracker.put( "generic.attackDamage", 1.0 );
|
||||||
|
+ attributesByName.put( "generic.attackDamage", GenericAttributes.e );
|
||||||
|
+ NBTTagList oldList = nbttaglist;
|
||||||
|
+ nbttaglist = new NBTTagList();
|
||||||
|
+
|
||||||
|
+ List<NBTTagCompound> op0 = new ArrayList<NBTTagCompound>();
|
||||||
|
+ List<NBTTagCompound> op1 = new ArrayList<NBTTagCompound>();
|
||||||
|
+ List<NBTTagCompound> op2 = new ArrayList<NBTTagCompound>();
|
||||||
|
+
|
||||||
|
+ for ( int i = 0; i < oldList.size(); ++i )
|
||||||
|
+ {
|
||||||
|
+ NBTTagCompound nbttagcompound = oldList.get( i );
|
||||||
|
+ if ( nbttagcompound == null ) continue;
|
||||||
|
+
|
||||||
|
+ if ( !( nbttagcompound.get( ATTRIBUTES_UUID_HIGH.NBT ) instanceof NBTTagLong ) )
|
||||||
|
+ {
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ if ( !( nbttagcompound.get( ATTRIBUTES_UUID_LOW.NBT ) instanceof NBTTagLong ) )
|
||||||
|
+ {
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ if ( !( nbttagcompound.get( ATTRIBUTES_IDENTIFIER.NBT ) instanceof NBTTagString ) || !CraftItemFactory.KNOWN_NBT_ATTRIBUTE_NAMES.contains( nbttagcompound.getString( ATTRIBUTES_IDENTIFIER.NBT ) ) )
|
||||||
|
+ {
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ if ( !( nbttagcompound.get( ATTRIBUTES_NAME.NBT ) instanceof NBTTagString ) || nbttagcompound.getString( ATTRIBUTES_NAME.NBT ).isEmpty() )
|
||||||
|
+ {
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ if ( !( nbttagcompound.get( ATTRIBUTES_VALUE.NBT ) instanceof NBTTagDouble ) )
|
||||||
|
+ {
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ if ( !( nbttagcompound.get( ATTRIBUTES_TYPE.NBT ) instanceof NBTTagInt ) || nbttagcompound.getInt( ATTRIBUTES_TYPE.NBT ) < 0 || nbttagcompound.getInt( ATTRIBUTES_TYPE.NBT ) > 2 )
|
||||||
|
+ {
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ switch ( nbttagcompound.getInt( ATTRIBUTES_TYPE.NBT ) )
|
||||||
|
+ {
|
||||||
|
+ case 0:
|
||||||
|
+ op0.add( nbttagcompound );
|
||||||
|
+ break;
|
||||||
|
+ case 1:
|
||||||
|
+ op1.add( nbttagcompound );
|
||||||
|
+ break;
|
||||||
|
+ case 2:
|
||||||
|
+ op2.add( nbttagcompound );
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ for ( NBTTagCompound nbtTagCompound : op0 )
|
||||||
|
+ {
|
||||||
|
+ String name = nbtTagCompound.getString( ATTRIBUTES_IDENTIFIER.NBT );
|
||||||
|
+ if ( attributeTracker.containsKey( name ) )
|
||||||
|
+ {
|
||||||
|
+ double val = attributeTracker.get( name );
|
||||||
|
+ val += nbtTagCompound.getDouble( ATTRIBUTES_VALUE.NBT );
|
||||||
|
+ if ( val != attributesByName.get( name ).a( val ) )
|
||||||
|
+ {
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ attributeTracker.put( name, val );
|
||||||
|
+ }
|
||||||
|
+ nbttaglist.add( nbtTagCompound );
|
||||||
|
+ }
|
||||||
|
+ for ( String name : attributeTracker.keySet() )
|
||||||
|
+ {
|
||||||
|
+ attributeTrackerX.put( name, attributeTracker.get( name ) );
|
||||||
|
+ }
|
||||||
|
+ for ( NBTTagCompound nbtTagCompound : op1 )
|
||||||
|
+ {
|
||||||
|
+ String name = nbtTagCompound.getString( ATTRIBUTES_IDENTIFIER.NBT );
|
||||||
|
+ if ( attributeTracker.containsKey( name ) )
|
||||||
|
+ {
|
||||||
|
+ double val = attributeTracker.get( name );
|
||||||
|
+ double valX = attributeTrackerX.get( name );
|
||||||
|
+ val += valX * nbtTagCompound.getDouble( ATTRIBUTES_VALUE.NBT );
|
||||||
|
+ if ( val != attributesByName.get( name ).a( val ) )
|
||||||
|
+ {
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ attributeTracker.put( name, val );
|
||||||
|
+ }
|
||||||
|
+ nbttaglist.add( nbtTagCompound );
|
||||||
|
+ }
|
||||||
|
+ for ( NBTTagCompound nbtTagCompound : op2 )
|
||||||
|
+ {
|
||||||
|
+ String name = nbtTagCompound.getString( ATTRIBUTES_IDENTIFIER.NBT );
|
||||||
|
+ if ( attributeTracker.containsKey( name ) )
|
||||||
|
+ {
|
||||||
|
+ double val = attributeTracker.get( name );
|
||||||
|
+ val += val * nbtTagCompound.getDouble( ATTRIBUTES_VALUE.NBT );
|
||||||
|
+ if ( val != attributesByName.get( name ).a( val ) )
|
||||||
|
+ {
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ attributeTracker.put( name, val );
|
||||||
|
+ }
|
||||||
|
+ nbttaglist.add( nbtTagCompound );
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ // Spigot end
|
||||||
|
+
|
||||||
|
for (int i = 0; i < nbttaglist.size(); ++i) {
|
||||||
|
if (!(nbttaglist.get(i) instanceof NBTTagCompound)) {
|
||||||
|
continue;
|
||||||
|
--
|
||||||
Reference in New Issue
Block a user