mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-02 09:21:57 +01:00
2f95e1a840
Fix empty `ench` tags being wiped by the meta system SpigotMC/Spigot@cc9a1a417f Add Hunger Config Values SpigotMC/Spigot@2cd515e224 Make debug logging togglable SpigotMC/Spigot@d31b1d616f Spigot has implemented a system of hunger exhaustion similar to ours, as such a lot of config values have been moved there. Our exhaustion patch has been trimmed and only a few values for exhaustion remain in paper.yml, the others now sit in spigot.yml
145 lines
No EOL
6.8 KiB
Diff
145 lines
No EOL
6.8 KiB
Diff
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;
|
|
--
|