Ursprung
9a108af219
Commit
a76ceb94cc
@ -58,6 +58,7 @@ import org.bukkit.Sound;
|
|||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.WorldType;
|
import org.bukkit.WorldType;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.potion.PotionEffectType;
|
import org.bukkit.potion.PotionEffectType;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
@ -437,6 +438,16 @@ public class PacketContainer implements Serializable {
|
|||||||
return getEntityModifier(event.getPlayer().getWorld());
|
return getEntityModifier(event.getPlayer().getWorld());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a read/write structure for entity types
|
||||||
|
* @return A modifier for an EntityType.
|
||||||
|
*/
|
||||||
|
public StructureModifier<EntityType> getEntityTypeModifier() {
|
||||||
|
return structureModifier.withType(
|
||||||
|
MinecraftReflection.getMinecraftClass("EntityTypes"),
|
||||||
|
BukkitConverters.getEntityTypeConverter());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves a read/write structure for chunk positions.
|
* Retrieves a read/write structure for chunk positions.
|
||||||
* @return A modifier for a ChunkPosition.
|
* @return A modifier for a ChunkPosition.
|
||||||
|
@ -49,12 +49,15 @@ import com.google.common.collect.ImmutableList;
|
|||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
|
import net.minecraft.server.v1_14_R1.EntityTypes;
|
||||||
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.WorldType;
|
import org.bukkit.WorldType;
|
||||||
import org.bukkit.advancement.Advancement;
|
import org.bukkit.advancement.Advancement;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
import org.bukkit.potion.PotionEffectType;
|
import org.bukkit.potion.PotionEffectType;
|
||||||
@ -656,6 +659,54 @@ public class BukkitConverters {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static MethodAccessor getEntityTypeName;
|
||||||
|
private static MethodAccessor entityTypeFromName;
|
||||||
|
|
||||||
|
public static EquivalentConverter<EntityType> getEntityTypeConverter() {
|
||||||
|
return ignoreNull(new EquivalentConverter<EntityType>() {
|
||||||
|
@Override
|
||||||
|
public Object getGeneric(EntityType specific) {
|
||||||
|
if (entityTypeFromName == null) {
|
||||||
|
Class<?> entityTypesClass = MinecraftReflection.getMinecraftClass("EntityTypes");
|
||||||
|
entityTypeFromName = Accessors.getMethodAccessor(
|
||||||
|
FuzzyReflection
|
||||||
|
.fromClass(entityTypesClass, false)
|
||||||
|
.getMethod(FuzzyMethodContract
|
||||||
|
.newBuilder()
|
||||||
|
.returnDerivedOf(Optional.class)
|
||||||
|
.parameterExactArray(new Class<?>[]{ String.class })
|
||||||
|
.build()));
|
||||||
|
}
|
||||||
|
|
||||||
|
Optional<?> opt = (Optional<?>) entityTypeFromName.invoke(null, specific.getName());
|
||||||
|
return opt.orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EntityType getSpecific(Object generic) {
|
||||||
|
if (getEntityTypeName == null) {
|
||||||
|
Class<?> entityTypesClass = MinecraftReflection.getMinecraftClass("EntityTypes");
|
||||||
|
getEntityTypeName = Accessors.getMethodAccessor(
|
||||||
|
FuzzyReflection
|
||||||
|
.fromClass(entityTypesClass, false)
|
||||||
|
.getMethod(FuzzyMethodContract
|
||||||
|
.newBuilder()
|
||||||
|
.returnTypeExact(MinecraftReflection.getMinecraftKeyClass())
|
||||||
|
.parameterExactArray(new Class<?>[]{ entityTypesClass })
|
||||||
|
.build()));
|
||||||
|
}
|
||||||
|
|
||||||
|
MinecraftKey key = MinecraftKey.fromHandle(getEntityTypeName.invoke(null, generic));
|
||||||
|
return EntityType.fromName(key.getKey());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<EntityType> getSpecificType() {
|
||||||
|
return EntityType.class;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve the converter used to convert NMS ItemStacks to Bukkit's ItemStack.
|
* Retrieve the converter used to convert NMS ItemStacks to Bukkit's ItemStack.
|
||||||
* @return Item stack converter.
|
* @return Item stack converter.
|
||||||
|
@ -46,6 +46,7 @@ import org.bukkit.ChatColor;
|
|||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.WorldType;
|
import org.bukkit.WorldType;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
@ -289,6 +290,14 @@ public class PacketContainerTest {
|
|||||||
// @Test
|
// @Test
|
||||||
// public void testGetPositionModifier() { }
|
// public void testGetPositionModifier() { }
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testEntityTypeModifier() {
|
||||||
|
PacketContainer packet = new PacketContainer(PacketType.Play.Server.SPAWN_ENTITY);
|
||||||
|
|
||||||
|
packet.getEntityTypeModifier().write(0, EntityType.ARROW);
|
||||||
|
assertEquals(packet.getEntityTypeModifier().read(0), EntityType.ARROW);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetPositionCollectionModifier() {
|
public void testGetPositionCollectionModifier() {
|
||||||
PacketContainer explosionPacket = new PacketContainer(PacketType.Play.Server.EXPLOSION);
|
PacketContainer explosionPacket = new PacketContainer(PacketType.Play.Server.EXPLOSION);
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren