implemented shaking and crouched properties
This commit is contained in:
		
							parent
							
								
									c81b4a8737
								
							
						
					
					
						commit
						079006d9cb
					
				
					 10 changed files with 62 additions and 11 deletions
				
			
		| 
						 | 
				
			
			@ -46,7 +46,7 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
 | 
			
		|||
        registerType("using_item", false); // TODO: Eating/Drinking/Blocking with sword/etc
 | 
			
		||||
        registerType("potion_color", 0xFFFFFF); // TODO
 | 
			
		||||
        registerType("potion_ambient", false); // TODO
 | 
			
		||||
        registerType("shaking", false); // TODO: Set the "ticks frozen in powdered snow" meta to 140 to get the entity to shake
 | 
			
		||||
        registerType("shaking", false);
 | 
			
		||||
        registerType("baby", false); // TODO
 | 
			
		||||
 | 
			
		||||
        // Player
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,7 +20,7 @@ import java.util.Collection;
 | 
			
		|||
 */
 | 
			
		||||
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);
 | 
			
		||||
    Collection<EntityData> effects(boolean onFire, boolean crouched, boolean glowing, boolean invisible, boolean usingElytra, boolean shaking);
 | 
			
		||||
    EntityData silent(boolean enabled);
 | 
			
		||||
    Collection<EntityData> name(Component name);
 | 
			
		||||
    EntityData noGravity();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,10 +1,21 @@
 | 
			
		|||
package lol.pyr.znpcsplus.metadata;
 | 
			
		||||
 | 
			
		||||
import com.github.retrooper.packetevents.protocol.entity.data.EntityData;
 | 
			
		||||
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
 | 
			
		||||
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
 | 
			
		||||
public class V1_17MetadataFactory extends V1_16MetadataFactory {
 | 
			
		||||
    @Override
 | 
			
		||||
    public EntityData skinLayers(boolean cape, boolean jacket, boolean leftSleeve, boolean rightSleeve, boolean leftLeg, boolean rightLeg, boolean hat) {
 | 
			
		||||
        return createSkinLayers(17, cape, jacket, leftSleeve, rightSleeve, leftLeg, rightLeg, hat);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Collection<EntityData> effects(boolean onFire, boolean crouching, boolean glowing, boolean invisible, boolean usingElytra, boolean shaking) {
 | 
			
		||||
        return list(
 | 
			
		||||
                newEntityData(0, EntityDataTypes.BYTE, (byte) ((onFire ? 0x01 : 0) | (crouching ? 0x02 : 0) | (invisible ? 0x20 : 0) | (glowing ? 0x40 : 0) | (usingElytra ? 0x80 : 0))),
 | 
			
		||||
                newEntityData(7, EntityDataTypes.INT, shaking ? 140 : 0)
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,8 +17,8 @@ public class V1_8MetadataFactory implements MetadataFactory {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public EntityData effects(boolean onFire, boolean glowing, boolean invisible) {
 | 
			
		||||
        return newEntityData(0, EntityDataTypes.BYTE, (byte) ((onFire ? 0x01 : 0) | (invisible ? 0x20 : 0)));
 | 
			
		||||
    public Collection<EntityData> effects(boolean onFire, boolean crouched, boolean glowing, boolean invisible, boolean usingElytra, boolean shaking) {
 | 
			
		||||
        return list(newEntityData(0, EntityDataTypes.BYTE, (byte) ((onFire ? 0x01 : 0) | (crouched ? 0x02 : 0) | (invisible ? 0x20 : 0))));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,8 +14,8 @@ public class V1_9MetadataFactory extends V1_8MetadataFactory {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public EntityData effects(boolean onFire, boolean glowing, boolean invisible) {
 | 
			
		||||
        return newEntityData(0, EntityDataTypes.BYTE, (byte) ((onFire ? 0x01 : 0) | (invisible ? 0x20 : 0) | (glowing ? 0x40 : 0)));
 | 
			
		||||
    public Collection<EntityData> effects(boolean onFire, boolean crouched, boolean glowing, boolean invisible, boolean usingElytra, boolean shaking) {
 | 
			
		||||
        return list(newEntityData(0, EntityDataTypes.BYTE, (byte) ((onFire ? 0x01 : 0) | (crouched ? 0x02 : 0) | (invisible ? 0x20 : 0) | (glowing ? 0x40 : 0) | (usingElytra ? 0x80 : 0))));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -72,6 +72,7 @@ public class NpcTypeImpl implements NpcType {
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        public NpcTypeImpl build() {
 | 
			
		||||
            allowedProperties.add(propertyRegistry.getByName("crouched"));
 | 
			
		||||
            allowedProperties.add(propertyRegistry.getByName("fire"));
 | 
			
		||||
            allowedProperties.add(propertyRegistry.getByName("invisible"));
 | 
			
		||||
            allowedProperties.add(propertyRegistry.getByName("silent"));
 | 
			
		||||
| 
						 | 
				
			
			@ -79,6 +80,8 @@ public class NpcTypeImpl implements NpcType {
 | 
			
		|||
            allowedProperties.add(propertyRegistry.getByName("skin_cape"));
 | 
			
		||||
            if (PacketEvents.getAPI().getServerManager().getVersion().isNewerThanOrEquals(ServerVersion.V_1_9))
 | 
			
		||||
                allowedProperties.add(propertyRegistry.getByName("glow"));
 | 
			
		||||
            if (PacketEvents.getAPI().getServerManager().getVersion().isNewerThanOrEquals(ServerVersion.V_1_17))
 | 
			
		||||
                allowedProperties.add(propertyRegistry.getByName("shaking"));
 | 
			
		||||
            return new NpcTypeImpl(name, type, hologramOffset, new HashSet<>(allowedProperties));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,31 @@
 | 
			
		|||
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_17PacketFactory extends V1_16PacketFactory {
 | 
			
		||||
    public V1_17PacketFactory(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);
 | 
			
		||||
        addAll(data, metadataFactory.effects(properties.getProperty(propertyRegistry.getByName("fire", Boolean.class)),
 | 
			
		||||
                properties.getProperty(propertyRegistry.getByName("crouched", Boolean.class)),
 | 
			
		||||
                properties.hasProperty(propertyRegistry.getByName("glow", Boolean.class)),
 | 
			
		||||
                properties.getProperty(propertyRegistry.getByName("invisible", Boolean.class)),
 | 
			
		||||
                false,
 | 
			
		||||
                properties.getProperty(propertyRegistry.getByName("shaking", Boolean.class))));
 | 
			
		||||
        return data;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -19,7 +19,7 @@ import org.bukkit.plugin.Plugin;
 | 
			
		|||
import java.util.EnumSet;
 | 
			
		||||
import java.util.concurrent.CompletableFuture;
 | 
			
		||||
 | 
			
		||||
public class V1_19PacketFactory extends V1_16PacketFactory {
 | 
			
		||||
public class V1_19PacketFactory extends V1_17PacketFactory {
 | 
			
		||||
    private final boolean oldTabPackets;
 | 
			
		||||
    public V1_19PacketFactory(TaskScheduler scheduler, MetadataFactory metadataFactory, PacketEventsAPI<Plugin> packetEvents, EntityPropertyRegistryImpl propertyRegistry) {
 | 
			
		||||
        super(scheduler, metadataFactory, packetEvents, propertyRegistry);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -135,10 +135,13 @@ public class V1_8PacketFactory implements PacketFactory {
 | 
			
		|||
                properties.getProperty(propertyRegistry.getByName("skin_right_leg", Boolean.class)),
 | 
			
		||||
                properties.getProperty(propertyRegistry.getByName("skin_hat", Boolean.class))
 | 
			
		||||
        ));
 | 
			
		||||
        add(data, metadataFactory.effects(
 | 
			
		||||
        addAll(data, metadataFactory.effects(
 | 
			
		||||
                properties.getProperty(propertyRegistry.getByName("fire", Boolean.class)),
 | 
			
		||||
                properties.getProperty(propertyRegistry.getByName("crouched", Boolean.class)),
 | 
			
		||||
                false,
 | 
			
		||||
                properties.getProperty(propertyRegistry.getByName("invisible", Boolean.class)))
 | 
			
		||||
                properties.getProperty(propertyRegistry.getByName("invisible", Boolean.class)),
 | 
			
		||||
                false,
 | 
			
		||||
                false)
 | 
			
		||||
        );
 | 
			
		||||
        add(data, metadataFactory.silent(properties.getProperty(propertyRegistry.getByName("silent", Boolean.class))));
 | 
			
		||||
        if (properties.hasProperty(propertyRegistry.getByName("name"))) addAll(data, metadataFactory.name(properties.getProperty(propertyRegistry.getByName("name", Component.class))));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,9 +20,12 @@ public class V1_9PacketFactory extends V1_8PacketFactory {
 | 
			
		|||
    @Override
 | 
			
		||||
    public Map<Integer, EntityData> generateMetadata(Player player, PacketEntity entity, PropertyHolder properties) {
 | 
			
		||||
        Map<Integer, EntityData> data = super.generateMetadata(player, entity, properties);
 | 
			
		||||
        add(data, metadataFactory.effects(properties.getProperty(propertyRegistry.getByName("fire", Boolean.class)),
 | 
			
		||||
        addAll(data, metadataFactory.effects(properties.getProperty(propertyRegistry.getByName("fire", Boolean.class)),
 | 
			
		||||
                properties.getProperty(propertyRegistry.getByName("crouched", Boolean.class)),
 | 
			
		||||
                properties.hasProperty(propertyRegistry.getByName("glow", Boolean.class)),
 | 
			
		||||
                properties.getProperty(propertyRegistry.getByName("invisible", Boolean.class))));
 | 
			
		||||
                properties.getProperty(propertyRegistry.getByName("invisible", Boolean.class)),
 | 
			
		||||
                false,
 | 
			
		||||
                false));
 | 
			
		||||
        return data;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue