fix itemstack properties in the api
This commit is contained in:
parent
00de9ef636
commit
c4bb24c888
4 changed files with 37 additions and 9 deletions
|
@ -1,5 +1,7 @@
|
||||||
package lol.pyr.znpcsplus.api.entity;
|
package lol.pyr.znpcsplus.api.entity;
|
||||||
|
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -32,10 +34,19 @@ public interface PropertyHolder {
|
||||||
*/
|
*/
|
||||||
<T> void setProperty(EntityProperty<T> key, T value);
|
<T> void setProperty(EntityProperty<T> key, T value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Weird fix which is sadly required in order to not decrease performance
|
||||||
|
* when using item properties, read https://github.com/Pyrbu/ZNPCsPlus/pull/129#issuecomment-1948777764
|
||||||
|
*
|
||||||
|
* @param key Unique key representing a property
|
||||||
|
* @param value The value to assign to the property key on this holder
|
||||||
|
*/
|
||||||
|
void setItemProperty(EntityProperty<?> key, ItemStack value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method used to get a set of all of the property keys that this holder has a value for
|
* Method used to get a set of all of the property keys that this holder has a value for
|
||||||
*
|
*
|
||||||
* @return List of property keys
|
* @return Set of property keys
|
||||||
*/
|
*/
|
||||||
Set<EntityProperty<?>> getAppliedProperties();
|
Set<EntityProperty<?>> getAppliedProperties();
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ import lol.pyr.znpcsplus.packets.PacketFactory;
|
||||||
import lol.pyr.znpcsplus.reflection.Reflections;
|
import lol.pyr.znpcsplus.reflection.Reflections;
|
||||||
import lol.pyr.znpcsplus.util.NpcLocation;
|
import lol.pyr.znpcsplus.util.NpcLocation;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
@ -97,6 +98,11 @@ public class PacketEntity implements PropertyHolder {
|
||||||
properties.setProperty(key, value);
|
properties.setProperty(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setItemProperty(EntityProperty<?> key, ItemStack value) {
|
||||||
|
properties.setItemProperty(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Set<EntityProperty<?>> getAppliedProperties() {
|
public Set<EntityProperty<?>> getAppliedProperties() {
|
||||||
return properties.getAppliedProperties();
|
return properties.getAppliedProperties();
|
||||||
|
|
|
@ -7,6 +7,7 @@ import lol.pyr.znpcsplus.entity.PacketEntity;
|
||||||
import lol.pyr.znpcsplus.packets.PacketFactory;
|
import lol.pyr.znpcsplus.packets.PacketFactory;
|
||||||
import lol.pyr.znpcsplus.util.NpcLocation;
|
import lol.pyr.znpcsplus.util.NpcLocation;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
@ -70,6 +71,11 @@ public class HologramLine<M> implements PropertyHolder {
|
||||||
throw new UnsupportedOperationException("Can't set properties on a hologram line");
|
throw new UnsupportedOperationException("Can't set properties on a hologram line");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setItemProperty(EntityProperty<?> key, ItemStack value) {
|
||||||
|
throw new UnsupportedOperationException("Can't set properties on a hologram line");
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Set<EntityProperty<?>> getAppliedProperties() {
|
public Set<EntityProperty<?>> getAppliedProperties() {
|
||||||
return properties;
|
return properties;
|
||||||
|
|
|
@ -148,21 +148,26 @@ public class NpcImpl extends Viewable implements Npc {
|
||||||
return propertyMap.containsKey((EntityPropertyImpl<?>) key);
|
return propertyMap.containsKey((EntityPropertyImpl<?>) key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
@Override
|
@Override
|
||||||
public <T> void setProperty(EntityProperty<T> key, T value) {
|
public <T> void setProperty(EntityProperty<T> key, T value) {
|
||||||
setProperty((EntityPropertyImpl<T>) key, value);
|
// See https://github.com/Pyrbu/ZNPCsPlus/pull/129#issuecomment-1948777764
|
||||||
|
Object val = value;
|
||||||
|
if (val instanceof ItemStack) val = SpigotConversionUtil.fromBukkitItemStack((ItemStack) val);
|
||||||
|
|
||||||
|
setProperty((EntityPropertyImpl<T>) key, (T) val);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public void setItemProperty(EntityProperty<?> key, ItemStack value) {
|
||||||
|
setProperty((EntityPropertyImpl<com.github.retrooper.packetevents.protocol.item.ItemStack>) key, SpigotConversionUtil.fromBukkitItemStack(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T> void setProperty(EntityPropertyImpl<T> key, T value) {
|
public <T> void setProperty(EntityPropertyImpl<T> key, T value) {
|
||||||
if (key == null) return;
|
if (key == null) return;
|
||||||
if (value == null || value.equals(key.getDefaultValue())) propertyMap.remove(key);
|
if (value == null || value.equals(key.getDefaultValue())) propertyMap.remove(key);
|
||||||
if (value instanceof ItemStack) {
|
else propertyMap.put(key, value);
|
||||||
ItemStack item = (ItemStack) value;
|
|
||||||
com.github.retrooper.packetevents.protocol.item.ItemStack packetItem = SpigotConversionUtil.fromBukkitItemStack(item);
|
|
||||||
propertyMap.put(key, packetItem);
|
|
||||||
} else {
|
|
||||||
propertyMap.put(key, value);
|
|
||||||
}
|
|
||||||
UNSAFE_refreshProperty(key);
|
UNSAFE_refreshProperty(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue