fix effects meta not working on versions 1.8-1.10 because of duplicate data indexes due to incorrect implementation of the "using_item" property on those versions
This commit is contained in:
parent
06c5397bd8
commit
46d848b823
9 changed files with 45 additions and 12 deletions
|
@ -19,7 +19,7 @@ import net.kyori.adventure.text.Component;
|
|||
*/
|
||||
public interface MetadataFactory {
|
||||
EntityData skinLayers(boolean cape, boolean jacket, boolean leftSleeve, boolean rightSleeve, boolean leftLeg, boolean rightLeg, boolean hat);
|
||||
EntityData effects(boolean onFire, boolean glowing, boolean invisible, boolean usingElytra);
|
||||
EntityData effects(boolean onFire, boolean glowing, boolean invisible, boolean usingElytra, boolean usingItemLegacy);
|
||||
EntityData silent(boolean enabled);
|
||||
EntityData name(Component name);
|
||||
EntityData nameShown();
|
||||
|
|
|
@ -4,6 +4,11 @@ import com.github.retrooper.packetevents.protocol.entity.data.EntityData;
|
|||
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
|
||||
|
||||
public class V1_11MetadataFactory extends V1_10MetadataFactory {
|
||||
@Override
|
||||
public EntityData effects(boolean onFire, boolean glowing, boolean invisible, boolean usingElytra, boolean usingItemLegacy) {
|
||||
return super.effects(onFire, glowing, invisible, usingElytra, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityData usingItem(boolean usingItem, boolean offHand, boolean riptide) {
|
||||
return newEntityData(6, EntityDataTypes.BYTE, (byte) ((usingItem ? 0x01 : 0) | (offHand ? 0x02 : 0)));
|
||||
|
|
|
@ -10,7 +10,7 @@ public class V1_17MetadataFactory extends V1_16MetadataFactory {
|
|||
}
|
||||
|
||||
@Override
|
||||
public EntityData effects(boolean onFire, boolean glowing, boolean invisible, boolean usingElytra) {
|
||||
public EntityData effects(boolean onFire, boolean glowing, boolean invisible, boolean usingElytra, boolean usingItemLegacy) {
|
||||
return newEntityData(0, EntityDataTypes.BYTE, (byte) ((onFire ? 0x01 : 0) | (invisible ? 0x20 : 0) | (glowing ? 0x40 : 0) | (usingElytra ? 0x80 : 0)));
|
||||
}
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ public class V1_8MetadataFactory implements MetadataFactory {
|
|||
}
|
||||
|
||||
@Override
|
||||
public EntityData effects(boolean onFire, boolean glowing, boolean invisible, boolean usingElytra) {
|
||||
return newEntityData(0, EntityDataTypes.BYTE, (byte) ((onFire ? 0x01 : 0) | (invisible ? 0x20 : 0)));
|
||||
public EntityData effects(boolean onFire, boolean glowing, boolean invisible, boolean usingElytra, boolean usingItemLegacy) {
|
||||
return newEntityData(0, EntityDataTypes.BYTE, (byte) ((onFire ? 0x01 : 0) | (usingItemLegacy ? 0x10 : 0) | (invisible ? 0x20 : 0)));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -45,7 +45,7 @@ public class V1_8MetadataFactory implements MetadataFactory {
|
|||
|
||||
@Override
|
||||
public EntityData usingItem(boolean enabled, boolean offHand, boolean riptide) {
|
||||
return newEntityData(0, EntityDataTypes.BYTE, (byte) (enabled ? 0x10 : 0));
|
||||
throw new UnsupportedOperationException("The standalone using item data isn't supported on this version");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -12,8 +12,8 @@ public class V1_9MetadataFactory extends V1_8MetadataFactory {
|
|||
}
|
||||
|
||||
@Override
|
||||
public EntityData effects(boolean onFire, boolean glowing, boolean invisible, boolean usingElytra) {
|
||||
return newEntityData(0, EntityDataTypes.BYTE, (byte) ((onFire ? 0x01 : 0) | (invisible ? 0x20 : 0) | (glowing ? 0x40 : 0) | (usingElytra ? 0x80 : 0)));
|
||||
public EntityData effects(boolean onFire, boolean glowing, boolean invisible, boolean usingElytra, boolean usingItemLegacy) {
|
||||
return newEntityData(0, EntityDataTypes.BYTE, (byte) ((onFire ? 0x01 : 0) | (usingItemLegacy ? 0x10 : 0) | (invisible ? 0x20 : 0) | (glowing ? 0x40 : 0) | (usingElytra ? 0x80 : 0)));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
package lol.pyr.znpcsplus.packets;
|
||||
|
||||
import com.github.retrooper.packetevents.PacketEventsAPI;
|
||||
import com.github.retrooper.packetevents.protocol.entity.data.EntityData;
|
||||
import lol.pyr.znpcsplus.api.entity.PropertyHolder;
|
||||
import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl;
|
||||
import lol.pyr.znpcsplus.entity.PacketEntity;
|
||||
import lol.pyr.znpcsplus.metadata.MetadataFactory;
|
||||
import lol.pyr.znpcsplus.scheduling.TaskScheduler;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class V1_11PacketFactory extends V1_10PacketFactory {
|
||||
public V1_11PacketFactory(TaskScheduler scheduler, MetadataFactory metadataFactory, PacketEventsAPI<Plugin> packetEvents, EntityPropertyRegistryImpl propertyRegistry) {
|
||||
super(scheduler, metadataFactory, packetEvents, propertyRegistry);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<Integer, EntityData> generateMetadata(Player player, PacketEntity entity, PropertyHolder properties) {
|
||||
Map<Integer, EntityData> data = super.generateMetadata(player, entity, properties);
|
||||
add(data, metadataFactory.usingItem(properties.getProperty(propertyRegistry.getByName("using_item", Boolean.class)), false, false));
|
||||
return data;
|
||||
}
|
||||
}
|
|
@ -18,7 +18,7 @@ import org.bukkit.plugin.Plugin;
|
|||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
public class V1_14PacketFactory extends V1_10PacketFactory {
|
||||
public class V1_14PacketFactory extends V1_11PacketFactory {
|
||||
public V1_14PacketFactory(TaskScheduler scheduler, MetadataFactory metadataFactory, PacketEventsAPI<Plugin> packetEvents, EntityPropertyRegistryImpl propertyRegistry) {
|
||||
super(scheduler, metadataFactory, packetEvents, propertyRegistry);
|
||||
}
|
||||
|
|
|
@ -139,10 +139,10 @@ public class V1_8PacketFactory implements PacketFactory {
|
|||
properties.getProperty(propertyRegistry.getByName("fire", Boolean.class)),
|
||||
false,
|
||||
properties.getProperty(propertyRegistry.getByName("invisible", Boolean.class)),
|
||||
false)
|
||||
);
|
||||
false,
|
||||
properties.getProperty(propertyRegistry.getByName("using_item", Boolean.class))
|
||||
));
|
||||
add(data, metadataFactory.silent(properties.getProperty(propertyRegistry.getByName("silent", Boolean.class))));
|
||||
add(data, metadataFactory.usingItem(properties.getProperty(propertyRegistry.getByName("using_item", Boolean.class)), false, false));
|
||||
add(data, metadataFactory.potionColor(properties.getProperty(propertyRegistry.getByName("potion_color", Color.class)).asRGB()));
|
||||
add(data, metadataFactory.potionAmbient(properties.getProperty(propertyRegistry.getByName("potion_ambient", Boolean.class))));
|
||||
if (properties.hasProperty(propertyRegistry.getByName("name"))) {
|
||||
|
|
|
@ -23,7 +23,9 @@ public class V1_9PacketFactory extends V1_8PacketFactory {
|
|||
add(data, metadataFactory.effects(properties.getProperty(propertyRegistry.getByName("fire", Boolean.class)),
|
||||
properties.hasProperty(propertyRegistry.getByName("glow", Boolean.class)),
|
||||
properties.getProperty(propertyRegistry.getByName("invisible", Boolean.class)),
|
||||
false));
|
||||
false,
|
||||
properties.getProperty(propertyRegistry.getByName("using_item", Boolean.class))
|
||||
));
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue