mirror of
https://github.com/TotalFreedomMC/TF-LibsDisguises.git
synced 2024-05-15 00:51:19 +00:00
This commit is contained in:
commit
4c74493464
21
nms/pom.xml
Normal file
21
nms/pom.xml
Normal file
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>nms</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<parent>
|
||||
<artifactId>parent</artifactId>
|
||||
<groupId>LibsDisguises</groupId>
|
||||
<version>10.0.27-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modules>
|
||||
<module>v1_17_R1</module>
|
||||
<module>v1_18_R1</module>
|
||||
<module>v1_18_R2</module>
|
||||
</modules>
|
||||
|
||||
</project>
|
|
@ -3,7 +3,7 @@
|
|||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>LibsDisguises</artifactId>
|
||||
<artifactId>nms</artifactId>
|
||||
<groupId>LibsDisguises</groupId>
|
||||
<version>10.0.27-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
|
@ -17,20 +17,22 @@
|
|||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
<maven.compiler.target>1.8</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
|
||||
<spigot.version>1.17.1-R0.1-SNAPSHOT</spigot.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot</artifactId>
|
||||
<version>1.17.1-R0.1-SNAPSHOT</version>
|
||||
<version>${spigot.version}</version>
|
||||
<classifier>remapped-mojang</classifier>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot-api</artifactId>
|
||||
<version>1.17.1-R0.1-SNAPSHOT</version>
|
||||
<version>${spigot.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
@ -49,7 +51,7 @@
|
|||
<plugin>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>specialsource-maven-plugin</artifactId>
|
||||
<version>1.2.2</version>
|
||||
<version>1.2.4</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
|
@ -58,11 +60,11 @@
|
|||
</goals>
|
||||
<id>remap-obf</id>
|
||||
<configuration>
|
||||
<srgIn>org.spigotmc:minecraft-server:1.17.1-R0.1-SNAPSHOT:txt:maps-mojang</srgIn>
|
||||
<srgIn>org.spigotmc:minecraft-server:${spigot.version}:txt:maps-mojang</srgIn>
|
||||
<reverse>true</reverse>
|
||||
<remappedDependencies>org.spigotmc:spigot:1.17.1-R0.1-SNAPSHOT:jar:remapped-mojang</remappedDependencies>
|
||||
<remappedDependencies>org.spigotmc:spigot:${spigot.version}:jar:remapped-mojang</remappedDependencies>
|
||||
<remappedClassifierName>remapped-mojang</remappedClassifierName>
|
||||
<remappedArtifactAttached>true</remappedArtifactAttached>
|
||||
<remappedClassifierName>remapped-obf</remappedClassifierName>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
|
@ -72,16 +74,15 @@
|
|||
</goals>
|
||||
<id>remap-spigot</id>
|
||||
<configuration>
|
||||
<inputFile>${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar</inputFile>
|
||||
<srgIn>org.spigotmc:minecraft-server:1.17.1-R0.1-SNAPSHOT:csrg:maps-spigot</srgIn>
|
||||
<remappedDependencies>org.spigotmc:spigot:1.17.1-R0.1-SNAPSHOT:jar:remapped-obf</remappedDependencies>
|
||||
<remappedArtifactAttached>true</remappedArtifactAttached>
|
||||
<inputFile>target/${project.build.finalName}-remapped-mojang.jar</inputFile>
|
||||
<srgIn>org.spigotmc:minecraft-server:${spigot.version}:csrg:maps-spigot</srgIn>
|
||||
<remappedDependencies>org.spigotmc:spigot:${spigot.version}:jar:remapped-obf</remappedDependencies>
|
||||
<remappedClassifierName>remapped-spigot</remappedClassifierName>
|
||||
<remappedArtifactAttached>true</remappedArtifactAttached>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
|
@ -3,7 +3,7 @@
|
|||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>LibsDisguises</artifactId>
|
||||
<artifactId>nms</artifactId>
|
||||
<groupId>LibsDisguises</groupId>
|
||||
<version>10.0.27-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
|
@ -16,20 +16,22 @@
|
|||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
<maven.compiler.target>1.8</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
|
||||
<spigot.version>1.18-R0.1-SNAPSHOT</spigot.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot</artifactId>
|
||||
<version>1.18-R0.1-SNAPSHOT</version>
|
||||
<version>${spigot.version}</version>
|
||||
<classifier>remapped-mojang</classifier>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot-api</artifactId>
|
||||
<version>1.18-R0.1-SNAPSHOT</version>
|
||||
<version>${spigot.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
@ -48,7 +50,7 @@
|
|||
<plugin>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>specialsource-maven-plugin</artifactId>
|
||||
<version>1.2.2</version>
|
||||
<version>1.2.4</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
|
@ -57,11 +59,11 @@
|
|||
</goals>
|
||||
<id>remap-obf</id>
|
||||
<configuration>
|
||||
<srgIn>org.spigotmc:minecraft-server:1.18-R0.1-SNAPSHOT:txt:maps-mojang</srgIn>
|
||||
<srgIn>org.spigotmc:minecraft-server:${spigot.version}:txt:maps-mojang</srgIn>
|
||||
<reverse>true</reverse>
|
||||
<remappedDependencies>org.spigotmc:spigot:1.18-R0.1-SNAPSHOT:jar:remapped-mojang</remappedDependencies>
|
||||
<remappedDependencies>org.spigotmc:spigot:${spigot.version}:jar:remapped-mojang</remappedDependencies>
|
||||
<remappedClassifierName>remapped-mojang</remappedClassifierName>
|
||||
<remappedArtifactAttached>true</remappedArtifactAttached>
|
||||
<remappedClassifierName>remapped-obf</remappedClassifierName>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
|
@ -71,16 +73,15 @@
|
|||
</goals>
|
||||
<id>remap-spigot</id>
|
||||
<configuration>
|
||||
<inputFile>${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar</inputFile>
|
||||
<srgIn>org.spigotmc:minecraft-server:1.18-R0.1-SNAPSHOT:csrg:maps-spigot</srgIn>
|
||||
<remappedDependencies>org.spigotmc:spigot:1.18-R0.1-SNAPSHOT:jar:remapped-obf</remappedDependencies>
|
||||
<remappedArtifactAttached>true</remappedArtifactAttached>
|
||||
<inputFile>target/${project.build.finalName}-remapped-mojang.jar</inputFile>
|
||||
<srgIn>org.spigotmc:minecraft-server:${spigot.version}:csrg:maps-spigot</srgIn>
|
||||
<remappedDependencies>org.spigotmc:spigot:${spigot.version}:jar:remapped-obf</remappedDependencies>
|
||||
<remappedClassifierName>remapped-spigot</remappedClassifierName>
|
||||
<remappedArtifactAttached>true</remappedArtifactAttached>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
|
@ -1,4 +1,4 @@
|
|||
package me.libraryaddict.disguise.utilities.reflection.v1_18;
|
||||
package me.libraryaddict.disguise.utilities.reflection.v1_18_1;
|
||||
|
||||
import com.comphenix.protocol.wrappers.BlockPosition;
|
||||
import com.comphenix.protocol.wrappers.EnumWrappers.Direction;
|
87
nms/v1_18_R2/pom.xml
Normal file
87
nms/v1_18_R2/pom.xml
Normal file
|
@ -0,0 +1,87 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>nms</artifactId>
|
||||
<groupId>LibsDisguises</groupId>
|
||||
<version>10.0.27-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>v1_18_R2</artifactId>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
<maven.compiler.target>1.8</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
|
||||
<spigot.version>1.18.2-R0.1-SNAPSHOT</spigot.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot</artifactId>
|
||||
<version>${spigot.version}</version>
|
||||
<classifier>remapped-mojang</classifier>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot-api</artifactId>
|
||||
<version>${spigot.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>LibsDisguises</groupId>
|
||||
<artifactId>shared</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.comphenix.protocol</groupId>
|
||||
<artifactId>ProtocolLib</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>specialsource-maven-plugin</artifactId>
|
||||
<version>1.2.4</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>remap</goal>
|
||||
</goals>
|
||||
<id>remap-obf</id>
|
||||
<configuration>
|
||||
<srgIn>org.spigotmc:minecraft-server:${spigot.version}:txt:maps-mojang</srgIn>
|
||||
<reverse>true</reverse>
|
||||
<remappedDependencies>org.spigotmc:spigot:${spigot.version}:jar:remapped-mojang</remappedDependencies>
|
||||
<remappedClassifierName>remapped-mojang</remappedClassifierName>
|
||||
<remappedArtifactAttached>true</remappedArtifactAttached>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>remap</goal>
|
||||
</goals>
|
||||
<id>remap-spigot</id>
|
||||
<configuration>
|
||||
<inputFile>target/${project.build.finalName}-remapped-mojang.jar</inputFile>
|
||||
<srgIn>org.spigotmc:minecraft-server:${spigot.version}:csrg:maps-spigot</srgIn>
|
||||
<remappedDependencies>org.spigotmc:spigot:${spigot.version}:jar:remapped-obf</remappedDependencies>
|
||||
<remappedClassifierName>remapped-spigot</remappedClassifierName>
|
||||
<remappedArtifactAttached>true</remappedArtifactAttached>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
|
@ -0,0 +1,466 @@
|
|||
package me.libraryaddict.disguise.utilities.reflection.v1_18_2;
|
||||
|
||||
import com.comphenix.protocol.wrappers.BlockPosition;
|
||||
import com.comphenix.protocol.wrappers.EnumWrappers.Direction;
|
||||
import com.comphenix.protocol.wrappers.Vector3F;
|
||||
import com.comphenix.protocol.wrappers.WrappedBlockData;
|
||||
import com.comphenix.protocol.wrappers.WrappedChatComponent;
|
||||
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
|
||||
import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
||||
import com.mojang.authlib.Agent;
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import com.mojang.authlib.ProfileLookupCallback;
|
||||
import com.mojang.authlib.minecraft.MinecraftSessionService;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import me.libraryaddict.disguise.utilities.reflection.ReflectionManagerAbstract;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.core.Vector3f;
|
||||
import net.minecraft.network.chat.TextComponent;
|
||||
import net.minecraft.network.protocol.game.ClientboundPlayerInfoPacket;
|
||||
import net.minecraft.network.syncher.EntityDataAccessor;
|
||||
import net.minecraft.network.syncher.SynchedEntityData;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.dedicated.DedicatedServer;
|
||||
import net.minecraft.server.level.ChunkMap;
|
||||
import net.minecraft.server.level.ServerChunkCache;
|
||||
import net.minecraft.server.level.ServerEntity;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.server.network.ServerGamePacketListenerImpl;
|
||||
import net.minecraft.server.network.ServerPlayerConnection;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.sounds.SoundSource;
|
||||
import net.minecraft.world.damagesource.DamageSource;
|
||||
import net.minecraft.world.effect.MobEffect;
|
||||
import net.minecraft.world.effect.MobEffectInstance;
|
||||
import net.minecraft.world.entity.EntityDimensions;
|
||||
import net.minecraft.world.entity.npc.VillagerData;
|
||||
import net.minecraft.world.entity.npc.VillagerProfession;
|
||||
import net.minecraft.world.entity.npc.VillagerType;
|
||||
import net.minecraft.world.level.GameType;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.phys.AABB;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import org.bukkit.Art;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.craftbukkit.v1_18_R2.CraftArt;
|
||||
import org.bukkit.craftbukkit.v1_18_R2.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_18_R2.CraftSound;
|
||||
import org.bukkit.craftbukkit.v1_18_R2.CraftWorld;
|
||||
import org.bukkit.craftbukkit.v1_18_R2.block.data.CraftBlockData;
|
||||
import org.bukkit.craftbukkit.v1_18_R2.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer;
|
||||
import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack;
|
||||
import org.bukkit.craftbukkit.v1_18_R2.util.CraftMagicNumbers;
|
||||
import org.bukkit.craftbukkit.v1_18_R2.util.CraftNamespacedKey;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Villager;
|
||||
import org.bukkit.inventory.EquipmentSlot;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.util.EulerAngle;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Arrays;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
public class ReflectionManager implements ReflectionManagerAbstract {
|
||||
public boolean hasInvul(Entity entity) {
|
||||
net.minecraft.world.entity.Entity nmsEntity = ((CraftEntity) entity).getHandle();
|
||||
|
||||
if (nmsEntity instanceof net.minecraft.world.entity.LivingEntity) {
|
||||
return nmsEntity.invulnerableTime > 0;
|
||||
} else {
|
||||
return nmsEntity.isInvulnerableTo(DamageSource.GENERIC);
|
||||
}
|
||||
}
|
||||
|
||||
public int getIncrementedStateId(Player player) {
|
||||
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
|
||||
return serverPlayer.containerMenu.incrementStateId(); // TODO Check correct container
|
||||
}
|
||||
|
||||
public int getNewEntityId() {
|
||||
return getNewEntityId(true);
|
||||
}
|
||||
|
||||
public int getNewEntityId(boolean increment) {
|
||||
try {
|
||||
Field entityCounter = net.minecraft.world.entity.Entity.class.getDeclaredField("c");
|
||||
entityCounter.setAccessible(true);
|
||||
AtomicInteger atomicInteger = (AtomicInteger) entityCounter.get(null);
|
||||
if (increment) {
|
||||
return atomicInteger.incrementAndGet();
|
||||
} else {
|
||||
return atomicInteger.get();
|
||||
}
|
||||
} catch (ReflectiveOperationException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
public ServerGamePacketListenerImpl getPlayerConnectionOrPlayer(Player player) {
|
||||
return ((CraftPlayer) player).getHandle().connection;
|
||||
}
|
||||
|
||||
public net.minecraft.world.entity.Entity createEntityInstance(String entityName) {
|
||||
Optional<net.minecraft.world.entity.EntityType<?>> optional = net.minecraft.world.entity.EntityType.byString(entityName.toLowerCase(Locale.ROOT));
|
||||
if (optional.isPresent()) {
|
||||
net.minecraft.world.entity.EntityType<?> entityType = optional.get();
|
||||
ServerLevel world = getWorldServer(Bukkit.getWorlds().get(0));
|
||||
net.minecraft.world.entity.Entity entity;
|
||||
if (entityType == net.minecraft.world.entity.EntityType.PLAYER) {
|
||||
WrappedGameProfile gameProfile = ReflectionManagerAbstract.getGameProfile(new UUID(0, 0), "Steve");
|
||||
entity = new ServerPlayer(getMinecraftServer(), world, (GameProfile) gameProfile.getHandle());
|
||||
}/* else if (entityType == net.minecraft.world.entity.EntityType.ENDER_PEARL) {
|
||||
entity = new ThrownEnderpearl(world, (net.minecraft.world.entity.LivingEntity) createEntityInstance("cow"));
|
||||
} else if (entityType == net.minecraft.world.entity.EntityType.FISHING_BOBBER) {
|
||||
entity = new FishingHook((net.minecraft.world.entity.player.Player) createEntityInstance("player"), world, 0, 0);
|
||||
}*/ else {
|
||||
entity = entityType.create(world);
|
||||
}
|
||||
|
||||
// Workaround for paper being 2 smart 4 me
|
||||
entity.setPos(1.0, 1.0, 1.0);
|
||||
entity.setPos(0.0, 0.0, 0.0);
|
||||
return entity;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public MobEffect getMobEffectList(int id) {
|
||||
return MobEffect.byId(id);
|
||||
}
|
||||
|
||||
public MobEffectInstance createMobEffect(PotionEffect effect) {
|
||||
return createMobEffect(effect.getType().getId(), effect.getDuration(), effect.getAmplifier(), effect.isAmbient(), effect.hasParticles());
|
||||
}
|
||||
|
||||
public MobEffectInstance createMobEffect(int id, int duration, int amplification, boolean ambient, boolean particles) {
|
||||
return new MobEffectInstance(getMobEffectList(id), duration, amplification, ambient, particles);
|
||||
}
|
||||
|
||||
public AABB getBoundingBox(Entity entity) {
|
||||
return ((CraftEntity) entity).getHandle().getBoundingBox();
|
||||
}
|
||||
|
||||
public double getXBoundingBox(Entity entity) {
|
||||
return getBoundingBox(entity).maxX - getBoundingBox(entity).minX;
|
||||
}
|
||||
|
||||
public double getYBoundingBox(Entity entity) {
|
||||
return getBoundingBox(entity).maxY - getBoundingBox(entity).minY;
|
||||
}
|
||||
|
||||
public double getZBoundingBox(Entity entity) {
|
||||
return getBoundingBox(entity).maxZ - getBoundingBox(entity).minZ;
|
||||
}
|
||||
|
||||
public ServerPlayer getPlayerFromPlayerConnection(Object nmsEntity) {
|
||||
return ((ServerPlayerConnection) nmsEntity).getPlayer();
|
||||
}
|
||||
|
||||
public Entity getBukkitEntity(Object nmsEntity) {
|
||||
return ((net.minecraft.world.entity.Entity) nmsEntity).getBukkitEntity();
|
||||
}
|
||||
|
||||
public ItemStack getBukkitItem(Object nmsItem) {
|
||||
return CraftItemStack.asBukkitCopy((net.minecraft.world.item.ItemStack) nmsItem);
|
||||
}
|
||||
|
||||
public ItemStack getCraftItem(ItemStack bukkitItem) {
|
||||
return CraftItemStack.asCraftCopy(bukkitItem);
|
||||
}
|
||||
|
||||
public SoundEvent getCraftSound(Sound sound) {
|
||||
return CraftSound.getSoundEffect(sound);
|
||||
}
|
||||
|
||||
public ServerEntity getEntityTrackerEntry(Entity target) throws Exception {
|
||||
ServerLevel world = ((CraftWorld) target.getWorld()).getHandle();
|
||||
ServerChunkCache chunkSource = world.getChunkSource();
|
||||
ChunkMap chunkMap = chunkSource.chunkMap;
|
||||
Int2ObjectMap<ChunkMap.TrackedEntity> entityMap = chunkMap.entityMap;
|
||||
ChunkMap.TrackedEntity trackedEntity = entityMap.get(target.getEntityId());
|
||||
if (trackedEntity == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Field field = ChunkMap.TrackedEntity.class.getDeclaredField("b");
|
||||
field.setAccessible(true);
|
||||
|
||||
return (ServerEntity) field.get(trackedEntity);
|
||||
}
|
||||
|
||||
public DedicatedServer getMinecraftServer() {
|
||||
return ((CraftServer) Bukkit.getServer()).getServer();
|
||||
}
|
||||
|
||||
public String getEnumArt(Art art) {
|
||||
return Registry.MOTIVE.getKey(CraftArt.BukkitToNotch(art)).getPath();
|
||||
}
|
||||
|
||||
public BlockPos getBlockPosition(int x, int y, int z) {
|
||||
return new BlockPos(x, y, z);
|
||||
}
|
||||
|
||||
public net.minecraft.core.Direction getEnumDirection(int direction) {
|
||||
return net.minecraft.core.Direction.from2DDataValue(direction);
|
||||
}
|
||||
|
||||
public ClientboundPlayerInfoPacket.Action getEnumPlayerInfoAction(int action) {
|
||||
return ClientboundPlayerInfoPacket.Action.values()[action];
|
||||
}
|
||||
|
||||
public ClientboundPlayerInfoPacket.PlayerUpdate getPlayerInfoData(WrappedGameProfile gameProfile) {
|
||||
return new ClientboundPlayerInfoPacket.PlayerUpdate((GameProfile) gameProfile.getHandle(), 0, GameType.SURVIVAL,
|
||||
new TextComponent(gameProfile.getName()));
|
||||
}
|
||||
|
||||
public Object getNmsEntity(Entity entity) {
|
||||
return ((CraftEntity) entity).getHandle();
|
||||
}
|
||||
|
||||
public double getPing(Player player) {
|
||||
return player.getPing();
|
||||
}
|
||||
|
||||
public float[] getSize(Entity entity) {
|
||||
net.minecraft.world.entity.Entity nmsEntity = ((CraftEntity) entity).getHandle();
|
||||
EntityDimensions dimensions = nmsEntity.getDimensions(net.minecraft.world.entity.Pose.STANDING);
|
||||
return new float[]{dimensions.width, nmsEntity.getEyeHeight()};
|
||||
}
|
||||
|
||||
public WrappedGameProfile getSkullBlob(WrappedGameProfile gameProfile) {
|
||||
DedicatedServer minecraftServer = getMinecraftServer();
|
||||
MinecraftSessionService sessionService = minecraftServer.getSessionService();
|
||||
return WrappedGameProfile.fromHandle(sessionService.fillProfileProperties((GameProfile) gameProfile.getHandle(), true));
|
||||
}
|
||||
|
||||
public Float getSoundModifier(Object entity) {
|
||||
if (!(entity instanceof net.minecraft.world.entity.LivingEntity)) {
|
||||
return 0.0f;
|
||||
} else {
|
||||
try {
|
||||
Method method = net.minecraft.world.entity.LivingEntity.class.getDeclaredMethod("eu");
|
||||
method.setAccessible(true);
|
||||
|
||||
return (Float) method.invoke(entity);
|
||||
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
return 0f;
|
||||
}
|
||||
|
||||
public void injectCallback(String playername, ProfileLookupCallback callback) {
|
||||
Agent agent = Agent.MINECRAFT;
|
||||
getMinecraftServer().getProfileRepository().findProfilesByNames(new String[]{playername}, agent, callback);
|
||||
}
|
||||
|
||||
public void setBoundingBox(Entity entity, double x, double y, double z) {
|
||||
Location loc = entity.getLocation();
|
||||
((CraftEntity) entity).getHandle()
|
||||
.setBoundingBox(new AABB(loc.getX() - x / 2, loc.getY() - y / 2, loc.getZ() - z / 2, loc.getX() + x / 2, loc.getY() + y / 2, loc.getZ() + z / 2));
|
||||
}
|
||||
|
||||
public Enum getSoundCategory(String category) {
|
||||
return Arrays.stream(SoundSource.values()).filter(soundSource -> category.equalsIgnoreCase(soundSource.getName())).findAny().get();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the NMS object EnumItemSlot from an EquipmentSlot.
|
||||
*
|
||||
* @param slot
|
||||
* @return null if the equipment slot is null
|
||||
*/
|
||||
public Enum createEnumItemSlot(EquipmentSlot slot) {
|
||||
switch (slot) {
|
||||
case HAND:
|
||||
return net.minecraft.world.entity.EquipmentSlot.MAINHAND;
|
||||
case OFF_HAND:
|
||||
return net.minecraft.world.entity.EquipmentSlot.OFFHAND;
|
||||
case FEET:
|
||||
return net.minecraft.world.entity.EquipmentSlot.FEET;
|
||||
case LEGS:
|
||||
return net.minecraft.world.entity.EquipmentSlot.LEGS;
|
||||
case CHEST:
|
||||
return net.minecraft.world.entity.EquipmentSlot.CHEST;
|
||||
case HEAD:
|
||||
return net.minecraft.world.entity.EquipmentSlot.HEAD;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public Object getSoundString(Sound sound) {
|
||||
return CraftSound.getSoundEffect(sound).getLocation().toString(); // TODO
|
||||
}
|
||||
|
||||
public Optional<?> convertOptional(Object val) {
|
||||
if (val instanceof BlockPosition) {
|
||||
BlockPosition pos = (BlockPosition) val;
|
||||
return Optional.of(getBlockPosition(pos.getX(), pos.getY(), pos.getZ()));
|
||||
} else if (val instanceof WrappedBlockData) {
|
||||
Object obj = ((WrappedBlockData) val).getHandle();
|
||||
return Optional.of(obj);
|
||||
} else if (val instanceof ItemStack) {
|
||||
Object obj = getNmsItem((ItemStack) val);
|
||||
return Optional.of(obj);
|
||||
} else if (val instanceof WrappedChatComponent) {
|
||||
Object obj = ((WrappedChatComponent) val).getHandle();
|
||||
return Optional.of(obj);
|
||||
}
|
||||
|
||||
return Optional.of(val);
|
||||
}
|
||||
|
||||
public Vector3f convertVec3(Object object) {
|
||||
if (object instanceof Vector3F) {
|
||||
Vector3F vector3F = (Vector3F) object;
|
||||
return new Vector3f(vector3F.getX(), vector3F.getY(), vector3F.getZ());
|
||||
} else if (object instanceof EulerAngle) {
|
||||
EulerAngle eulerAngle = (EulerAngle) object;
|
||||
return new Vector3f((float) eulerAngle.getX(), (float) eulerAngle.getY(), (float) eulerAngle.getZ());
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public net.minecraft.core.Direction convertDirection(Direction direction) {
|
||||
return net.minecraft.core.Direction.from3DDataValue(direction.ordinal());
|
||||
}
|
||||
|
||||
public Material getMaterial(String name) {
|
||||
return CraftMagicNumbers.INSTANCE.getMaterial(name, CraftMagicNumbers.INSTANCE.getDataVersion());
|
||||
}
|
||||
|
||||
public String getItemName(Material material) {
|
||||
return Registry.ITEM.getKey(CraftMagicNumbers.getItem(material)).getPath();
|
||||
}
|
||||
|
||||
public net.minecraft.world.item.ItemStack getNmsItem(ItemStack itemStack) {
|
||||
return CraftItemStack.asNMSCopy(itemStack);
|
||||
}
|
||||
|
||||
public VillagerData getNmsVillagerData(Villager.Type villagerType, Villager.Profession villagerProfession) {
|
||||
VillagerType nmsVillagerType = Registry.VILLAGER_TYPE.get(CraftNamespacedKey.toMinecraft(villagerType.getKey()));
|
||||
VillagerProfession nmsVillagerProfession = Registry.VILLAGER_PROFESSION.get(CraftNamespacedKey.toMinecraft(villagerProfession.getKey()));
|
||||
|
||||
return new net.minecraft.world.entity.npc.VillagerData(nmsVillagerType, nmsVillagerProfession, 1);
|
||||
}
|
||||
|
||||
public VillagerType getVillagerType(Villager.Type type) {
|
||||
return Registry.VILLAGER_TYPE.get(CraftNamespacedKey.toMinecraft(type.getKey()));
|
||||
}
|
||||
|
||||
public VillagerProfession getVillagerProfession(Villager.Profession profession) {
|
||||
return Registry.VILLAGER_PROFESSION.get(CraftNamespacedKey.toMinecraft(profession.getKey()));
|
||||
}
|
||||
|
||||
public <T> SynchedEntityData.DataItem<T> createDataWatcherItem(WrappedDataWatcher.WrappedDataWatcherObject wrappedDataWatcherObject, T metaItem) {
|
||||
return new SynchedEntityData.DataItem<>((EntityDataAccessor<T>) wrappedDataWatcherObject.getHandle(), metaItem);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public SoundEvent createSoundEffect(String minecraftKey) {
|
||||
return new SoundEvent(new ResourceLocation(minecraftKey));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation createMinecraftKey(String name) {
|
||||
return new ResourceLocation(name);
|
||||
}
|
||||
|
||||
public Vec3 getVec3D(Vector vector) {
|
||||
return new Vec3(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
|
||||
public net.minecraft.world.entity.EntityType getEntityType(EntityType entityType) {
|
||||
return net.minecraft.world.entity.EntityType.byString(
|
||||
entityType.getName() == null ? entityType.name().toLowerCase(Locale.ENGLISH) : entityType.getName()).orElse(null);
|
||||
}
|
||||
|
||||
public Object registerEntityType(NamespacedKey key) {
|
||||
net.minecraft.world.entity.EntityType<net.minecraft.world.entity.Entity> newEntity =
|
||||
new net.minecraft.world.entity.EntityType<>(null, null, false, false, false, false, null, null, 0, 0);
|
||||
Registry.register(Registry.ENTITY_TYPE, CraftNamespacedKey.toMinecraft(key), newEntity);
|
||||
newEntity.getDescriptionId();
|
||||
return newEntity; // TODO ??? Some reflection in legacy that I'm unsure about
|
||||
}
|
||||
|
||||
public int getEntityTypeId(Object entityTypes) {
|
||||
net.minecraft.world.entity.EntityType entityType = (net.minecraft.world.entity.EntityType) entityTypes;
|
||||
return Registry.ENTITY_TYPE.getId(entityType);
|
||||
}
|
||||
|
||||
public int getEntityTypeId(EntityType entityType) {
|
||||
return getEntityTypeId(getEntityType(entityType));
|
||||
}
|
||||
|
||||
public Object getEntityType(NamespacedKey name) {
|
||||
return Registry.ENTITY_TYPE.get(CraftNamespacedKey.toMinecraft(name));
|
||||
}
|
||||
|
||||
public Object getNmsEntityPose(String enumPose) {
|
||||
return net.minecraft.world.entity.Pose.valueOf(enumPose);
|
||||
}
|
||||
|
||||
public int getCombinedIdByBlockData(BlockData data) {
|
||||
BlockState state = ((CraftBlockData) data).getState();
|
||||
return Block.getId(state);
|
||||
}
|
||||
|
||||
public int getCombinedIdByItemStack(ItemStack itemStack) {
|
||||
Block block = CraftMagicNumbers.getBlock(itemStack.getType());
|
||||
return Block.getId(block.defaultBlockState());
|
||||
}
|
||||
|
||||
public BlockData getBlockDataByCombinedId(int id) {
|
||||
return CraftBlockData.fromData(Block.stateById(id));
|
||||
}
|
||||
|
||||
public ItemStack getItemStackByCombinedId(int id) {
|
||||
return new ItemStack(CraftMagicNumbers.getMaterial(Block.stateById(id).getBlock()));
|
||||
}
|
||||
|
||||
public ServerLevel getWorldServer(World w) {
|
||||
return ((CraftWorld) w).getHandle();
|
||||
}
|
||||
|
||||
public ItemMeta getDeserializedItemMeta(Map<String, Object> meta) {
|
||||
try {
|
||||
Class<?> aClass = Class.forName("org.bukkit.craftbukkit.v1_18_R2.inventory.CraftMetaItem$SerializableMeta");
|
||||
Method deserialize = aClass.getDeclaredMethod("deserialize", Map.class);
|
||||
Object itemMeta = deserialize.invoke(null, meta);
|
||||
|
||||
return (ItemMeta) itemMeta;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -3,13 +3,14 @@
|
|||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>LibsDisguises</artifactId>
|
||||
<artifactId>parent</artifactId>
|
||||
<groupId>LibsDisguises</groupId>
|
||||
<version>10.0.27-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>plugin</artifactId>
|
||||
<artifactId>LibsDisguises</artifactId>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
|
@ -179,22 +180,30 @@
|
|||
<dependency>
|
||||
<groupId>LibsDisguises</groupId>
|
||||
<artifactId>shared</artifactId>
|
||||
<version>10.0.27-SNAPSHOT</version>
|
||||
<scope>compile</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>LibsDisguises</groupId>
|
||||
<artifactId>v1_18_R1</artifactId>
|
||||
<version>10.0.27-SNAPSHOT</version>
|
||||
<classifier>remapped-spigot</classifier>
|
||||
<version>${project.version}</version>
|
||||
<scope>compile</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>LibsDisguises</groupId>
|
||||
<artifactId>v1_17_R1</artifactId>
|
||||
<version>10.0.27-SNAPSHOT</version>
|
||||
<version>${project.version}</version>
|
||||
<classifier>remapped-spigot</classifier>
|
||||
<scope>compile</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>LibsDisguises</groupId>
|
||||
<artifactId>v1_18_R1</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<classifier>remapped-spigot</classifier>
|
||||
<scope>compile</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>LibsDisguises</groupId>
|
||||
<artifactId>v1_18_R2</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<classifier>remapped-spigot</classifier>
|
||||
<scope>compile</scope>
|
||||
<optional>true</optional>
|
||||
|
|
|
@ -105,6 +105,10 @@ public class DisguiseAPI {
|
|||
return disguise.getValue();
|
||||
}
|
||||
|
||||
public static void removeCustomDisguise(String disguiseName) {
|
||||
DisguiseConfig.removeCustomDisguise(disguiseName);
|
||||
}
|
||||
|
||||
public static Disguise constructDisguise(Entity entity) {
|
||||
return constructDisguise(entity, true, false);
|
||||
}
|
||||
|
|
|
@ -278,6 +278,9 @@ public class DisguiseConfig {
|
|||
@Getter
|
||||
@Setter
|
||||
private static String data;
|
||||
@Getter
|
||||
@Setter
|
||||
private static boolean randomUUIDS;
|
||||
|
||||
public static boolean isArmorstandsName() {
|
||||
return getPlayerNameType() == PlayerNameType.ARMORSTANDS;
|
||||
|
@ -646,6 +649,7 @@ public class DisguiseConfig {
|
|||
setViewSelfDisguisesDefault(config.getBoolean("ViewSelfDisguisesDefault"));
|
||||
setContactMojangServers(config.getBoolean("ContactMojangServers"));
|
||||
setDisguiseRadiusMax(config.getInt("DisguiseRadiusMax"));
|
||||
setRandomUUIDS(config.getBoolean("RandomUUIDs"));
|
||||
String apiKey = config.getString("MineSkinAPIKey");
|
||||
|
||||
if (apiKey != null && apiKey.matches("[a-zA-Z0-9]{8,}")) {
|
||||
|
|
|
@ -226,6 +226,8 @@ public abstract class DisguiseBaseCommand implements CommandExecutor {
|
|||
|
||||
tabs.add(value);
|
||||
}
|
||||
} else {
|
||||
tabs.addAll(wantToUse);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -233,7 +235,7 @@ public abstract class DisguiseBaseCommand implements CommandExecutor {
|
|||
if (addMethods) {
|
||||
// If this is a method, add. Else if it can be a param of the previous argument, add.
|
||||
for (WatcherMethod method : ParamInfoManager.getDisguiseWatcherMethods(disguisePerm.getWatcherClass())) {
|
||||
if (!perms.isAllowedDisguise(disguisePerm, Collections.singletonList(method.getName()))) {
|
||||
if (!perms.isAllowedDisguise(disguisePerm, Collections.singletonList(method.getName())) || !method.isUsable(disguisePerm.getType())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -78,6 +78,10 @@ public class DisguiseHelpCommand extends DisguiseBaseCommand implements TabCompl
|
|||
|
||||
try {
|
||||
for (WatcherMethod method : ParamInfoManager.getDisguiseWatcherMethods(watcher)) {
|
||||
if (!method.isUsable(type.getType())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (args.length < 2 || !args[1].equalsIgnoreCase(LibsMsg.DHELP_SHOW.get())) {
|
||||
if (!perms.isAllowedDisguise(type, Collections.singleton(method.getName().toLowerCase(Locale.ENGLISH)))) {
|
||||
ignored++;
|
||||
|
|
|
@ -118,6 +118,10 @@ public abstract class Disguise {
|
|||
}
|
||||
|
||||
public UUID getUUID() {
|
||||
if (!isPlayerDisguise() && !DisguiseConfig.isRandomUUIDS() && getEntity() != null) {
|
||||
return getEntity().getUniqueId();
|
||||
}
|
||||
|
||||
// Partial fix for disguises serialized in older versions
|
||||
if (this.uuid == null) {
|
||||
this.uuid = ReflectionManager.getRandomUUID();
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package me.libraryaddict.disguise.disguisetypes;
|
||||
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsRemovedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import me.libraryaddict.disguise.utilities.translations.TranslateType;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
|
|
|
@ -19,7 +19,10 @@ import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher;
|
|||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.LibsPremium;
|
||||
import me.libraryaddict.disguise.utilities.parser.RandomDefaultValue;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.MethodGroupType;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.MethodIgnoredBy;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.MethodOnlyUsedBy;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import me.libraryaddict.disguise.utilities.reflection.ReflectionManager;
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
|
@ -83,6 +86,7 @@ public class FlagWatcher {
|
|||
return pitchLock != null;
|
||||
}
|
||||
|
||||
@MethodIgnoredBy(value = {}, group = MethodGroupType.NO_LOOK)
|
||||
public void setPitchLocked(boolean pitchLocked) {
|
||||
if (isPitchLocked() == pitchLocked) {
|
||||
return;
|
||||
|
@ -137,6 +141,7 @@ public class FlagWatcher {
|
|||
return yawLock != null;
|
||||
}
|
||||
|
||||
@MethodIgnoredBy(value = {}, group = MethodGroupType.NO_LOOK)
|
||||
public void setYawLocked(boolean yawLocked) {
|
||||
if (!DisguiseConfig.isMovementPacketsEnabled()) {
|
||||
return;
|
||||
|
@ -149,6 +154,7 @@ public class FlagWatcher {
|
|||
setYawLock(yawLocked ? 0F : null);
|
||||
}
|
||||
|
||||
@MethodIgnoredBy(value = {}, group = MethodGroupType.NO_LOOK)
|
||||
public void setPitchLock(Float pitch) {
|
||||
if (!DisguiseConfig.isMovementPacketsEnabled()) {
|
||||
return;
|
||||
|
@ -183,6 +189,7 @@ public class FlagWatcher {
|
|||
}
|
||||
}
|
||||
|
||||
@MethodIgnoredBy(value = {}, group = MethodGroupType.NO_LOOK)
|
||||
public void setYawLock(Float yaw) {
|
||||
this.yawLock = yaw;
|
||||
|
||||
|
@ -236,6 +243,7 @@ public class FlagWatcher {
|
|||
return getEquipment().getHelmet();
|
||||
}
|
||||
|
||||
@MethodOnlyUsedBy(value = {}, group = MethodGroupType.EQUIPPABLE)
|
||||
public void setHelmet(ItemStack itemStack) {
|
||||
getEquipment().setHelmet(itemStack);
|
||||
}
|
||||
|
@ -244,6 +252,7 @@ public class FlagWatcher {
|
|||
return getEquipment().getBoots();
|
||||
}
|
||||
|
||||
@MethodOnlyUsedBy(value = {}, group = MethodGroupType.EQUIPPABLE)
|
||||
public void setBoots(ItemStack itemStack) {
|
||||
getEquipment().setBoots(itemStack);
|
||||
}
|
||||
|
@ -252,6 +261,7 @@ public class FlagWatcher {
|
|||
return getEquipment().getLeggings();
|
||||
}
|
||||
|
||||
@MethodOnlyUsedBy(value = {}, group = MethodGroupType.EQUIPPABLE)
|
||||
public void setLeggings(ItemStack itemStack) {
|
||||
getEquipment().setLeggings(itemStack);
|
||||
}
|
||||
|
@ -260,6 +270,7 @@ public class FlagWatcher {
|
|||
return getEquipment().getChestplate();
|
||||
}
|
||||
|
||||
@MethodOnlyUsedBy(value = {}, group = MethodGroupType.EQUIPPABLE)
|
||||
public void setChestplate(ItemStack itemStack) {
|
||||
getEquipment().setChestplate(itemStack);
|
||||
}
|
||||
|
@ -269,6 +280,7 @@ public class FlagWatcher {
|
|||
this.upsideDown = upsideDown;
|
||||
}
|
||||
|
||||
@MethodIgnoredBy(value = {}, group = MethodGroupType.NO_LOOK)
|
||||
public void setUpsideDown(boolean upsideDown) {
|
||||
if (isUpsideDown() == upsideDown) {
|
||||
return;
|
||||
|
@ -467,6 +479,7 @@ public class FlagWatcher {
|
|||
}
|
||||
|
||||
@NmsAddedIn(NmsVersion.v1_14)
|
||||
@MethodIgnoredBy(value = {}, group = MethodGroupType.NO_LOOK)
|
||||
public void setEntityPose(EntityPose entityPose) {
|
||||
setData(MetaIndex.ENTITY_POSE, entityPose);
|
||||
sendData(MetaIndex.ENTITY_POSE);
|
||||
|
@ -476,6 +489,7 @@ public class FlagWatcher {
|
|||
return getEquipment().getArmorContents();
|
||||
}
|
||||
|
||||
@MethodOnlyUsedBy(value = {}, group = MethodGroupType.EQUIPPABLE)
|
||||
public void setArmor(ItemStack[] items) {
|
||||
getEquipment().setArmorContents(items);
|
||||
}
|
||||
|
@ -664,6 +678,7 @@ public class FlagWatcher {
|
|||
return equipment.getItemInMainHand();
|
||||
}
|
||||
|
||||
@MethodOnlyUsedBy(value = {}, group = MethodGroupType.HOLDABLE)
|
||||
public void setItemInMainHand(ItemStack itemstack) {
|
||||
setItemStack(EquipmentSlot.HAND, itemstack);
|
||||
}
|
||||
|
@ -672,6 +687,7 @@ public class FlagWatcher {
|
|||
return equipment.getItemInOffHand();
|
||||
}
|
||||
|
||||
@MethodOnlyUsedBy(value = {}, group = MethodGroupType.HOLDABLE)
|
||||
public void setItemInOffHand(ItemStack itemstack) {
|
||||
setItemStack(EquipmentSlot.OFF_HAND, itemstack);
|
||||
}
|
||||
|
@ -753,6 +769,7 @@ public class FlagWatcher {
|
|||
return getEntityFlag(7);
|
||||
}
|
||||
|
||||
@MethodIgnoredBy(value = {}, group = MethodGroupType.NO_LOOK)
|
||||
public void setFlyingWithElytra(boolean flying) {
|
||||
setEntityFlag(7, flying);
|
||||
sendData(MetaIndex.ENTITY_META);
|
||||
|
@ -816,16 +833,16 @@ public class FlagWatcher {
|
|||
|
||||
@Deprecated
|
||||
@NmsAddedIn(NmsVersion.v1_12)
|
||||
@MethodOnlyUsedBy(value = {}, group = MethodGroupType.HOLDABLE)
|
||||
public void setRightClicking(boolean rightClicking) {
|
||||
setMainHandRaised(rightClicking);
|
||||
}
|
||||
|
||||
//@NmsRemovedIn(val = NmsVersion.v1_13)
|
||||
public boolean isMainHandRaised() {
|
||||
return !NmsVersion.v1_13.isSupported() && getEntityFlag(4);
|
||||
}
|
||||
|
||||
//@NmsRemovedIn(val = NmsVersion.v1_13)
|
||||
@MethodOnlyUsedBy(value = {}, group = MethodGroupType.HOLDABLE)
|
||||
public void setMainHandRaised(boolean setRightClicking) {
|
||||
if (NmsVersion.v1_13.isSupported()) {
|
||||
return;
|
||||
|
@ -839,6 +856,7 @@ public class FlagWatcher {
|
|||
return getEntityFlag(1);
|
||||
}
|
||||
|
||||
@MethodOnlyUsedBy(value = {DisguiseType.PLAYER})
|
||||
public void setSneaking(boolean setSneaking) {
|
||||
setEntityFlag(1, setSneaking);
|
||||
sendData(MetaIndex.ENTITY_META);
|
||||
|
@ -1027,6 +1045,7 @@ public class FlagWatcher {
|
|||
}
|
||||
|
||||
@NmsAddedIn(NmsVersion.v1_14)
|
||||
@MethodIgnoredBy(value = {}, group = MethodGroupType.NO_LOOK)
|
||||
public void setSleeping(boolean sleeping) {
|
||||
if (isSleeping() == sleeping) {
|
||||
return;
|
||||
|
@ -1043,6 +1062,7 @@ public class FlagWatcher {
|
|||
}
|
||||
|
||||
@NmsAddedIn(NmsVersion.v1_14)
|
||||
@MethodIgnoredBy(value = {}, group = MethodGroupType.NO_LOOK)
|
||||
public void setSwimming(boolean swimming) {
|
||||
if (isSwimming() == swimming) {
|
||||
return;
|
||||
|
|
|
@ -92,8 +92,8 @@ import me.libraryaddict.disguise.disguisetypes.watchers.ZoglinWatcher;
|
|||
import me.libraryaddict.disguise.disguisetypes.watchers.ZombieVillagerWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.ZombieWatcher;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsRemovedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import me.libraryaddict.disguise.utilities.reflection.ReflectionManager;
|
||||
import me.libraryaddict.disguise.utilities.translations.LibsMsg;
|
||||
|
|
|
@ -2,7 +2,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
|||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsRemovedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
|
||||
/**
|
||||
|
|
|
@ -2,7 +2,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
|||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
|
||||
/**
|
||||
|
|
|
@ -6,7 +6,7 @@ import me.libraryaddict.disguise.disguisetypes.Disguise;
|
|||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.parser.RandomDefaultValue;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import org.apache.commons.lang.math.RandomUtils;
|
||||
import org.bukkit.Color;
|
||||
|
|
|
@ -3,7 +3,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
|||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
|
||||
public class ArrowWatcher extends FlagWatcher {
|
||||
|
|
|
@ -2,7 +2,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
|||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
|
||||
/**
|
||||
|
|
|
@ -3,7 +3,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
|||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import org.bukkit.TreeSpecies;
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ import me.libraryaddict.disguise.disguisetypes.AnimalColor;
|
|||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.parser.RandomDefaultValue;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.entity.Cat;
|
||||
|
|
|
@ -3,7 +3,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
|||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
|
|
@ -8,7 +8,7 @@ import me.libraryaddict.disguise.DisguiseAPI;
|
|||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import me.libraryaddict.disguise.utilities.reflection.ReflectionManager;
|
||||
import me.libraryaddict.disguise.utilities.translations.TranslateType;
|
||||
|
|
|
@ -3,7 +3,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
|||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
|
|
@ -3,7 +3,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
|||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
|
|
@ -4,7 +4,7 @@ import me.libraryaddict.disguise.DisguiseConfig;
|
|||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.parser.RandomDefaultValue;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import org.bukkit.entity.Fox;
|
||||
|
||||
|
|
|
@ -2,8 +2,8 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
|||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsRemovedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import org.bukkit.entity.Spellcaster;
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
|||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import org.bukkit.inventory.MainHand;
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
|||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.GolemCrack;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
|
||||
public class IronGolemWatcher extends InsentientWatcher {
|
||||
|
|
|
@ -9,11 +9,14 @@ import com.comphenix.protocol.wrappers.WrappedAttribute.Builder;
|
|||
import lombok.Getter;
|
||||
import me.libraryaddict.disguise.DisguiseAPI;
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.MethodGroupType;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.MethodOnlyUsedBy;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
@ -124,6 +127,7 @@ public class LivingWatcher extends FlagWatcher {
|
|||
|
||||
@Override
|
||||
@NmsAddedIn(NmsVersion.v1_13)
|
||||
@MethodOnlyUsedBy(value = {}, group = MethodGroupType.HOLDABLE)
|
||||
public void setMainHandRaised(boolean setRightClicking) {
|
||||
setHandInUse(true);
|
||||
|
||||
|
@ -136,6 +140,7 @@ public class LivingWatcher extends FlagWatcher {
|
|||
}
|
||||
|
||||
@NmsAddedIn(NmsVersion.v1_13)
|
||||
@MethodOnlyUsedBy(value = {}, group = MethodGroupType.HOLDABLE)
|
||||
public void setOffhandRaised(boolean setLeftClicking) {
|
||||
setHandInUse(false);
|
||||
|
||||
|
@ -296,6 +301,7 @@ public class LivingWatcher extends FlagWatcher {
|
|||
return getData(MetaIndex.LIVING_ARROWS);
|
||||
}
|
||||
|
||||
@MethodOnlyUsedBy(value = {DisguiseType.PLAYER})
|
||||
public void setArrowsSticking(int arrowsNo) {
|
||||
setData(MetaIndex.LIVING_ARROWS, Math.max(0, Math.min(127, arrowsNo)));
|
||||
sendData(MetaIndex.LIVING_ARROWS);
|
||||
|
@ -324,6 +330,7 @@ public class LivingWatcher extends FlagWatcher {
|
|||
|
||||
@Deprecated
|
||||
@NmsAddedIn(NmsVersion.v1_12)
|
||||
@MethodOnlyUsedBy(value = {}, group = MethodGroupType.HOLDABLE)
|
||||
public void setRightClicking(boolean rightClicking) {
|
||||
setMainHandRaised(rightClicking);
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
|||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import me.libraryaddict.disguise.utilities.reflection.ReflectionManager;
|
||||
import org.bukkit.Material;
|
||||
|
|
|
@ -2,7 +2,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
|||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import org.bukkit.entity.MushroomCow;
|
||||
|
||||
|
|
|
@ -2,8 +2,8 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
|||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsRemovedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import org.bukkit.entity.Ocelot;
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ import me.libraryaddict.disguise.DisguiseConfig;
|
|||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.parser.RandomDefaultValue;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import org.bukkit.entity.Panda;
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
|||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
|
||||
/**
|
||||
|
|
|
@ -4,7 +4,6 @@ import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
|||
import com.comphenix.protocol.wrappers.nbt.NbtCompound;
|
||||
import com.comphenix.protocol.wrappers.nbt.NbtFactory;
|
||||
import me.libraryaddict.disguise.DisguiseConfig;
|
||||
import me.libraryaddict.disguise.LibsDisguises;
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.disguisetypes.PlayerDisguise;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
|
||||
/**
|
||||
|
|
|
@ -2,7 +2,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
|||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
|
||||
/**
|
||||
|
|
|
@ -4,7 +4,7 @@ import me.libraryaddict.disguise.disguisetypes.Disguise;
|
|||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.parser.RandomDefaultValue;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package me.libraryaddict.disguise.disguisetypes.watchers;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
|
||||
/**
|
||||
|
|
|
@ -2,7 +2,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
|||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
|
||||
/**
|
||||
|
|
|
@ -6,7 +6,7 @@ import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
|||
import me.libraryaddict.disguise.disguisetypes.VillagerData;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.parser.RandomDefaultValue;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import org.bukkit.entity.Villager;
|
||||
import org.bukkit.entity.Villager.Profession;
|
||||
|
|
|
@ -2,7 +2,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
|||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsRemovedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
|
||||
public class VindicatorWatcher extends IllagerWatcher {
|
||||
|
|
|
@ -3,7 +3,7 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
|||
import me.libraryaddict.disguise.disguisetypes.AnimalColor;
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsRemovedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import org.bukkit.DyeColor;
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ import me.libraryaddict.disguise.disguisetypes.Disguise;
|
|||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.disguisetypes.VillagerData;
|
||||
import me.libraryaddict.disguise.utilities.parser.RandomDefaultValue;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import org.bukkit.entity.Villager;
|
||||
import org.bukkit.entity.Villager.Profession;
|
||||
|
|
|
@ -2,8 +2,8 @@ package me.libraryaddict.disguise.disguisetypes.watchers;
|
|||
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsRemovedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
|
||||
public class ZombieWatcher extends InsentientWatcher {
|
||||
|
|
|
@ -807,9 +807,9 @@ public class DisguiseUtilities {
|
|||
return new Disguise[0];
|
||||
}
|
||||
|
||||
try {
|
||||
String cached;
|
||||
String cached = null;
|
||||
|
||||
try {
|
||||
try (FileInputStream input = new FileInputStream(disguiseFile);
|
||||
InputStreamReader inputReader = new InputStreamReader(input, StandardCharsets.UTF_8);
|
||||
BufferedReader reader = new BufferedReader(inputReader)) {
|
||||
|
@ -850,7 +850,7 @@ public class DisguiseUtilities {
|
|||
|
||||
return disguises;
|
||||
} catch (Throwable e) {
|
||||
getLogger().severe("Malformed disguise for " + entityUUID);
|
||||
getLogger().severe("Malformed disguise for " + entityUUID + "(" + cached + ")");
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
|
@ -2292,7 +2292,7 @@ public class DisguiseUtilities {
|
|||
return list.toArray(new String[0]);
|
||||
}*/
|
||||
public static String quote(String string) {
|
||||
if (!string.contains(" ") && !string.startsWith("\"") && !string.endsWith("\"")) {
|
||||
if (!string.isEmpty() && !string.contains(" ") && !string.startsWith("\"") && !string.endsWith("\"")) {
|
||||
return string;
|
||||
}
|
||||
|
||||
|
|
|
@ -149,7 +149,13 @@ public class LibsPremium {
|
|||
}
|
||||
|
||||
private static void doSecondaryCheck(String version) {
|
||||
File[] files = new File("plugins/LibsDisguises/").listFiles();
|
||||
File pluginDir = new File("plugins/LibsDisguises/");
|
||||
|
||||
if (!pluginDir.exists() && LibsDisguises.getInstance() != null) {
|
||||
pluginDir = LibsDisguises.getInstance().getDataFolder();
|
||||
}
|
||||
|
||||
File[] files = pluginDir.listFiles();
|
||||
boolean foundJar = false;
|
||||
|
||||
if (files == null) {
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package me.libraryaddict.disguise.utilities.packets.packetlisteners;
|
||||
|
||||
import com.comphenix.protocol.PacketType.Play.Server;
|
||||
import com.comphenix.protocol.ProtocolLibrary;
|
||||
import com.comphenix.protocol.events.ListenerPriority;
|
||||
import com.comphenix.protocol.events.PacketAdapter;
|
||||
import com.comphenix.protocol.events.PacketContainer;
|
||||
|
@ -9,7 +8,6 @@ import com.comphenix.protocol.events.PacketEvent;
|
|||
import com.comphenix.protocol.reflect.StructureModifier;
|
||||
import me.libraryaddict.disguise.LibsDisguises;
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
import me.libraryaddict.disguise.disguisetypes.MobDisguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.TargetedDisguise;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
|
@ -21,19 +19,12 @@ import org.bukkit.entity.Entity;
|
|||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.Set;
|
||||
|
||||
public class PacketListenerSounds extends PacketAdapter {
|
||||
|
||||
/**
|
||||
* This is a fix for the stupidity that is "I can't separate the sounds from the sounds the player
|
||||
* heard, and the sounds of the entity tracker heard"
|
||||
*/
|
||||
private static boolean cancelSound;
|
||||
|
||||
public PacketListenerSounds(LibsDisguises plugin) {
|
||||
super(plugin, ListenerPriority.NORMAL, Server.NAMED_SOUND_EFFECT, Server.ENTITY_STATUS);
|
||||
super(plugin, ListenerPriority.NORMAL, Server.NAMED_SOUND_EFFECT);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -42,11 +33,7 @@ public class PacketListenerSounds extends PacketAdapter {
|
|||
return;
|
||||
}
|
||||
|
||||
if (event.getPacketType() == Server.ENTITY_STATUS) {
|
||||
handleEntityStatus(event);
|
||||
} else if (event.getPacketType() == Server.NAMED_SOUND_EFFECT) {
|
||||
handleNamedSoundEffect(event);
|
||||
}
|
||||
handleNamedSoundEffect(event);
|
||||
}
|
||||
|
||||
private void handleNamedSoundEffect(PacketEvent event) {
|
||||
|
@ -87,13 +74,12 @@ public class PacketListenerSounds extends PacketAdapter {
|
|||
disguisedEntity = entity;
|
||||
soundGroup = SoundGroup.getGroup(entity.getType().name());
|
||||
|
||||
if (soundGroup.getSound(soundEffectObj) == null) {
|
||||
if (soundGroup == null || soundGroup.getSound(soundEffectObj) == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ((!(entity instanceof LivingEntity)) || ((LivingEntity) entity).getHealth() > 0) {
|
||||
boolean hasInvun = ReflectionManager.hasInvul(entity);
|
||||
soundType = soundGroup.getType(soundEffectObj, !hasInvun);
|
||||
soundType = soundGroup.getType(soundEffectObj);
|
||||
} else {
|
||||
soundType = SoundType.DEATH;
|
||||
}
|
||||
|
@ -108,23 +94,19 @@ public class PacketListenerSounds extends PacketAdapter {
|
|||
return;
|
||||
}
|
||||
|
||||
// Blocks null and CANCEL, HURT and DEATH are 100% handled by entity status!
|
||||
if (soundType != SoundType.STEP && soundType != SoundType.IDLE) {
|
||||
//event.setCancelled(true);
|
||||
// return;
|
||||
}
|
||||
|
||||
if (disguisedEntity == observer && !disguise.isSelfDisguiseSoundsReplaced()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Object sound = null;
|
||||
SoundGroup disguiseSound = SoundGroup.getGroup(disguise);
|
||||
|
||||
if (disguiseSound != null) {
|
||||
sound = disguiseSound.getSound(soundType);
|
||||
if (disguiseSound == null) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
Object sound = disguiseSound.getSound(soundType);
|
||||
|
||||
if (sound == null) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
|
@ -134,7 +116,7 @@ public class PacketListenerSounds extends PacketAdapter {
|
|||
float volume = (float) mods.read(5);
|
||||
float pitch = (float) mods.read(6);
|
||||
|
||||
// If the volume is the default
|
||||
// If the volume is the default, set it to what the real disguise sound group expects
|
||||
if (volume == soundGroup.getDamageAndIdleSoundVolume()) {
|
||||
volume = disguiseSound.getDamageAndIdleSoundVolume();
|
||||
}
|
||||
|
@ -170,105 +152,4 @@ public class PacketListenerSounds extends PacketAdapter {
|
|||
|
||||
event.setPacket(newPacket);
|
||||
}
|
||||
|
||||
private void handleEntityStatus(PacketEvent event) {
|
||||
StructureModifier<Object> mods = event.getPacket().getModifier();
|
||||
Player observer = event.getPlayer();
|
||||
|
||||
if ((byte) mods.read(1) != 2) {
|
||||
return;
|
||||
}
|
||||
|
||||
// It made a damage animation
|
||||
Disguise disguise = DisguiseUtilities.getDisguise(observer, event.getPacket().getIntegers().read(0));
|
||||
|
||||
if (disguise == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Entity entity = disguise.getEntity();
|
||||
|
||||
if (disguise instanceof TargetedDisguise) {
|
||||
Set<TargetedDisguise> discs = DisguiseUtilities.getDisguises().get(entity.getEntityId());
|
||||
|
||||
for (TargetedDisguise targetedDisguise : discs) {
|
||||
if (targetedDisguise != disguise) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!targetedDisguise.canSee(observer)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SoundType soundType = SoundType.HURT;
|
||||
|
||||
if (entity instanceof LivingEntity && ((LivingEntity) entity).getHealth() <= 0) {
|
||||
soundType = SoundType.DEATH;
|
||||
}
|
||||
|
||||
if (entity == event.getPlayer() && !disguise.getType().isPlayer()) {
|
||||
if (!disguise.isSelfDisguiseSoundsReplaced()) {
|
||||
cancelSound = !cancelSound;
|
||||
|
||||
if (cancelSound) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SoundGroup entitySoundGroup = SoundGroup.getGroup(entity.getType().name());
|
||||
|
||||
if (entitySoundGroup == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Object sound = entitySoundGroup.getSound(soundType);
|
||||
|
||||
if (sound == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
SoundGroup disSound = SoundGroup.getGroup(disguise);
|
||||
SoundGroup expectedGroup = SoundGroup.getGroup(disguise.getType().name());
|
||||
|
||||
if (disSound == null || disSound == expectedGroup) {
|
||||
return;
|
||||
}
|
||||
|
||||
Location loc = entity.getLocation();
|
||||
PacketContainer packet =
|
||||
new PacketContainer(sound.getClass().getSimpleName().equals("MinecraftKey") ? Server.CUSTOM_SOUND_EFFECT : Server.NAMED_SOUND_EFFECT);
|
||||
|
||||
mods = packet.getModifier();
|
||||
|
||||
mods.write(0, sound);
|
||||
mods.write(1, ReflectionManager.getSoundCategory(disguise.getType())); // Meh
|
||||
mods.write(2, (int) (loc.getX() * 8D));
|
||||
mods.write(3, (int) (loc.getY() * 8D));
|
||||
mods.write(4, (int) (loc.getZ() * 8D));
|
||||
mods.write(5, disSound.getDamageAndIdleSoundVolume());
|
||||
|
||||
float pitch;
|
||||
|
||||
if (disguise instanceof MobDisguise && !((MobDisguise) disguise).isAdult()) {
|
||||
pitch = (DisguiseUtilities.random.nextFloat() - DisguiseUtilities.random.nextFloat()) * 0.2F + 1.4F;
|
||||
} else {
|
||||
pitch = (DisguiseUtilities.random.nextFloat() - DisguiseUtilities.random.nextFloat()) * 0.2F + 1.0F;
|
||||
}
|
||||
|
||||
if (disguise.getType() == DisguiseType.BAT) {
|
||||
pitch *= 0.95F;
|
||||
}
|
||||
|
||||
mods.write(6, pitch);
|
||||
|
||||
event.setCancelled(true);
|
||||
try {
|
||||
ProtocolLibrary.getProtocolManager().sendServerPacket(observer, packet, false);
|
||||
} catch (InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,7 +47,7 @@ public class ParamInfoManager {
|
|||
}
|
||||
|
||||
public static ParamInfo getParamInfo(WatcherMethod method) {
|
||||
if (method.getName().equals("setSoundGroup")) {
|
||||
if (method.getName().equalsIgnoreCase("setSoundGroup")) {
|
||||
return getParamInfoSoundGroup();
|
||||
}
|
||||
|
||||
|
|
|
@ -72,10 +72,6 @@ public class ParamInfoTypes {
|
|||
return new ParamInfoItemBlock(ItemStack.class, "ItemStack", "ItemStack (Material)", "An ItemStack compromised of Material", getMaterials());
|
||||
}
|
||||
|
||||
public ParamInfoSoundGroup getParamInfoSoundGroup() {
|
||||
return new ParamInfoSoundGroup();
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor values are listed here for continuity
|
||||
*/
|
||||
|
|
|
@ -30,7 +30,6 @@ import org.bukkit.entity.LivingEntity;
|
|||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.EntityEquipment;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.permissions.PermissionAttachmentInfo;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
|
||||
import java.lang.invoke.MethodHandle;
|
||||
|
|
|
@ -2,7 +2,6 @@ package me.libraryaddict.disguise.utilities.parser;
|
|||
|
||||
import me.libraryaddict.disguise.DisguiseConfig;
|
||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Ageable;
|
||||
import org.bukkit.entity.Animals;
|
||||
import org.bukkit.entity.Monster;
|
||||
|
|
|
@ -2,6 +2,7 @@ package me.libraryaddict.disguise.utilities.parser;
|
|||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
|
||||
import java.lang.invoke.MethodHandle;
|
||||
|
@ -19,6 +20,11 @@ public class WatcherMethod {
|
|||
private final Class param;
|
||||
private final boolean randomDefault;
|
||||
private final boolean hideFromTab;
|
||||
private final boolean[] unusableBy;
|
||||
|
||||
public boolean isUsable(DisguiseType type) {
|
||||
return !unusableBy[type.ordinal()];
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
|
|
|
@ -41,6 +41,8 @@ import me.libraryaddict.disguise.disguisetypes.watchers.ZombieWatcher;
|
|||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseValues;
|
||||
import me.libraryaddict.disguise.utilities.LibsPremium;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn;
|
||||
import me.libraryaddict.disguise.utilities.sounds.SoundGroup;
|
||||
import org.apache.commons.lang.ArrayUtils;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
|
@ -758,7 +760,17 @@ public class ReflectionManager {
|
|||
|
||||
public static ReflectionManagerAbstract getReflectionManager(NmsVersion nmsVersion) {
|
||||
try {
|
||||
Class<?> aClass = Class.forName("me.libraryaddict.disguise.utilities.reflection." + nmsVersion.name() + ".ReflectionManager");
|
||||
String versionName = nmsVersion.name();
|
||||
|
||||
if (nmsVersion == NmsVersion.v1_18) {
|
||||
if (Bukkit.getVersion().contains("1.18.1")) {
|
||||
versionName += "_1";
|
||||
} else {
|
||||
versionName += "_2";
|
||||
}
|
||||
}
|
||||
|
||||
Class<?> aClass = Class.forName("me.libraryaddict.disguise.utilities.reflection." + versionName + ".ReflectionManager");
|
||||
Object o = aClass.getConstructor().newInstance();
|
||||
|
||||
return (ReflectionManagerAbstract) o;
|
||||
|
|
|
@ -2,6 +2,7 @@ package me.libraryaddict.disguise.utilities.reflection;
|
|||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
|
||||
/**
|
||||
* Created by libraryaddict on 17/02/2020.
|
||||
|
@ -18,6 +19,15 @@ public class WatcherInfo {
|
|||
private String method;
|
||||
private String param;
|
||||
private String descriptor;
|
||||
private boolean[] unusableBy;
|
||||
|
||||
public void setUnusableBy(DisguiseType[] types) {
|
||||
unusableBy = new boolean[DisguiseType.values().length];
|
||||
|
||||
for (DisguiseType type : types) {
|
||||
unusableBy[type.ordinal()] = true;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isSupported() {
|
||||
if (getAdded() >= 0 && added > ReflectionManager.getVersion().ordinal()) {
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
package me.libraryaddict.disguise.utilities.reflection.annotations;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
@Getter
|
||||
public enum MethodGroupType {
|
||||
NO_LOOK(DisguiseType.AREA_EFFECT_CLOUD, DisguiseType.DRAGON_FIREBALL, DisguiseType.DROPPED_ITEM, DisguiseType.EGG, DisguiseType.ENDER_CRYSTAL,
|
||||
DisguiseType.ENDER_PEARL, DisguiseType.ENDER_SIGNAL, DisguiseType.FALLING_BLOCK, DisguiseType.FIREBALL, DisguiseType.FIREWORK,
|
||||
DisguiseType.FISHING_HOOK, DisguiseType.LEASH_HITCH, DisguiseType.MARKER, DisguiseType.PRIMED_TNT, DisguiseType.SHULKER, DisguiseType.SMALL_FIREBALL,
|
||||
DisguiseType.SNOWBALL, DisguiseType.SPLASH_POTION, DisguiseType.THROWN_EXP_BOTTLE),
|
||||
|
||||
EQUIPPABLE(DisguiseType.ARMOR_STAND, DisguiseType.DROWNED, DisguiseType.GIANT, DisguiseType.HUSK, DisguiseType.MODDED_LIVING, DisguiseType.MODDED_MISC,
|
||||
DisguiseType.PIG_ZOMBIE, DisguiseType.PIGLIN, DisguiseType.PIGLIN_BRUTE, DisguiseType.PLAYER, DisguiseType.SKELETON, DisguiseType.STRAY,
|
||||
DisguiseType.WITHER_SKELETON, DisguiseType.ZOMBIE),
|
||||
|
||||
HOLDABLE(EQUIPPABLE, DisguiseType.ENDERMAN, DisguiseType.EVOKER, DisguiseType.ILLUSIONER, DisguiseType.IRON_GOLEM, DisguiseType.PILLAGER,
|
||||
DisguiseType.RAVAGER, DisguiseType.VEX, DisguiseType.VINDICATOR, DisguiseType.WANDERING_TRADER, DisguiseType.WITCH, DisguiseType.ZOMBIE_VILLAGER),
|
||||
|
||||
NONE();
|
||||
|
||||
private final DisguiseType[] disguiseTypes;
|
||||
|
||||
MethodGroupType(DisguiseType... types) {
|
||||
this.disguiseTypes = types;
|
||||
}
|
||||
|
||||
MethodGroupType(MethodGroupType inheritFrom, DisguiseType... types) {
|
||||
this.disguiseTypes = Arrays.copyOf(types, types.length + inheritFrom.getDisguiseTypes().length);
|
||||
|
||||
System.arraycopy(inheritFrom.getDisguiseTypes(), 0, getDisguiseTypes(), types.length, inheritFrom.getDisguiseTypes().length);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package me.libraryaddict.disguise.utilities.reflection.annotations;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface MethodIgnoredBy {
|
||||
DisguiseType[] value();
|
||||
|
||||
MethodGroupType group() default MethodGroupType.NONE;
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package me.libraryaddict.disguise.utilities.reflection.annotations;
|
||||
|
||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface MethodOnlyUsedBy {
|
||||
DisguiseType[] value();
|
||||
|
||||
MethodGroupType group() default MethodGroupType.NONE;
|
||||
}
|
|
@ -1,4 +1,6 @@
|
|||
package me.libraryaddict.disguise.utilities.reflection;
|
||||
package me.libraryaddict.disguise.utilities.reflection.annotations;
|
||||
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
|
@ -1,4 +1,6 @@
|
|||
package me.libraryaddict.disguise.utilities.reflection;
|
||||
package me.libraryaddict.disguise.utilities.reflection.annotations;
|
||||
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
|
@ -121,18 +121,12 @@ public class SoundGroup {
|
|||
/**
|
||||
* Used to check if this sound name is owned by this disguise sound.
|
||||
*/
|
||||
public SoundType getType(Object sound, boolean ignoreDamage) {
|
||||
public SoundType getType(Object sound) {
|
||||
if (sound == null) {
|
||||
return SoundType.CANCEL;
|
||||
}
|
||||
|
||||
SoundType soundType = getSound(sound);
|
||||
|
||||
if (soundType == SoundType.DEATH || (ignoreDamage && soundType == SoundType.HURT)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return soundType;
|
||||
return getSound(sound);
|
||||
}
|
||||
|
||||
public boolean isCancelSound(String sound) {
|
||||
|
|
|
@ -1,12 +1,15 @@
|
|||
package me.libraryaddict.disguise.utilities.watchers;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.utilities.LibsPremium;
|
||||
import me.libraryaddict.disguise.utilities.parser.RandomDefaultValue;
|
||||
import me.libraryaddict.disguise.utilities.reflection.ClassGetter;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsRemovedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.MethodIgnoredBy;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.MethodOnlyUsedBy;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.annotations.NmsRemovedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.WatcherInfo;
|
||||
import me.libraryaddict.disguise.utilities.sounds.DisguiseSoundEnums;
|
||||
import me.libraryaddict.disguise.utilities.sounds.SoundGroup;
|
||||
|
@ -19,9 +22,11 @@ import java.lang.annotation.RetentionPolicy;
|
|||
import java.lang.reflect.Method;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* Created by libraryaddict on 13/02/2020.
|
||||
|
@ -120,6 +125,7 @@ public class CompileMethods {
|
|||
|
||||
int added = -1;
|
||||
int removed = -1;
|
||||
DisguiseType[] unusableBy = new DisguiseType[0];
|
||||
|
||||
if (method.isAnnotationPresent(NmsAddedIn.class)) {
|
||||
added = method.getAnnotation(NmsAddedIn.class).value().ordinal();
|
||||
|
@ -133,12 +139,32 @@ public class CompileMethods {
|
|||
removed = method.getDeclaringClass().getAnnotation(NmsRemovedIn.class).value().ordinal();
|
||||
}
|
||||
|
||||
if (method.isAnnotationPresent(MethodOnlyUsedBy.class)) {
|
||||
DisguiseType[] usableBy = method.getAnnotation(MethodOnlyUsedBy.class).value();
|
||||
|
||||
if (usableBy.length == 0) {
|
||||
usableBy = method.getAnnotation(MethodOnlyUsedBy.class).group().getDisguiseTypes();
|
||||
}
|
||||
|
||||
List<DisguiseType> list = Arrays.asList(usableBy);
|
||||
|
||||
unusableBy =
|
||||
Arrays.stream(DisguiseType.values()).filter(type -> !list.contains(type)).collect(Collectors.toList()).toArray(new DisguiseType[0]);
|
||||
} else if (method.isAnnotationPresent(MethodIgnoredBy.class)) {
|
||||
unusableBy = method.getAnnotation(MethodIgnoredBy.class).value();
|
||||
|
||||
if (unusableBy.length == 0) {
|
||||
unusableBy = method.getAnnotation(MethodIgnoredBy.class).group().getDisguiseTypes();
|
||||
}
|
||||
}
|
||||
|
||||
String param = method.getParameterCount() == 1 ? method.getParameterTypes()[0].getName() : null;
|
||||
|
||||
WatcherInfo info = new WatcherInfo();
|
||||
info.setMethod(method.getName());
|
||||
info.setAdded(added);
|
||||
info.setRemoved(removed);
|
||||
info.setUnusableBy(unusableBy);
|
||||
info.setDeprecated(method.isAnnotationPresent(Deprecated.class));
|
||||
info.setParam(param);
|
||||
info.setDescriptor(getMethodDescriptor(method));
|
||||
|
|
|
@ -103,8 +103,9 @@ public class DisguiseMethods {
|
|||
|
||||
MethodHandle method = MethodHandles.publicLookup().findVirtual(watcher, info.getMethod(), type);
|
||||
|
||||
WatcherMethod m = new WatcherMethod(watcher, method, info.getMethod(), returnType, param, info.isRandomDefault(),
|
||||
info.isDeprecated() && info.getAdded() == 0);
|
||||
WatcherMethod m =
|
||||
new WatcherMethod(watcher, method, info.getMethod(), returnType, param, info.isRandomDefault(), info.isDeprecated() && info.getAdded() == 0,
|
||||
info.getUnusableBy());
|
||||
|
||||
methods.add(m);
|
||||
|
||||
|
@ -156,7 +157,7 @@ public class DisguiseMethods {
|
|||
try {
|
||||
WatcherMethod method = new WatcherMethod(disguiseClass,
|
||||
MethodHandles.publicLookup().findVirtual(disguiseClass, methodName, MethodType.methodType(returnType, cl)), methodName, null,
|
||||
cl, randomDefault, false);
|
||||
cl, randomDefault, false, new boolean[DisguiseType.values().length]);
|
||||
|
||||
methods.add(method);
|
||||
|
||||
|
@ -167,7 +168,7 @@ public class DisguiseMethods {
|
|||
|
||||
WatcherMethod getMethod =
|
||||
new WatcherMethod(disguiseClass, MethodHandles.publicLookup().findVirtual(disguiseClass, getName, MethodType.methodType(cl)),
|
||||
getName, cl, null, randomDefault, false);
|
||||
getName, cl, null, randomDefault, false, new boolean[DisguiseType.values().length]);
|
||||
|
||||
methods.add(getMethod);
|
||||
break;
|
||||
|
|
|
@ -38,4 +38,9 @@ CarpetableLlama: false
|
|||
|
||||
# Can a player interact with a non-saddled horse of any type, to give it a saddle?
|
||||
# This does not change what you can ride or control!
|
||||
SaddleableHorse: false
|
||||
SaddleableHorse: false
|
||||
|
||||
# You shouldn't need to touch this, but if you do; This was added so scoreboard stuff that affects a certain UUID, will still continue to affect that UUID
|
||||
# This doesn't affect player disguises as those would be severely impacted
|
||||
# If you are getting issues using this, please do not report them. You disable this at your own risk.
|
||||
RandomUUIDs: true
|
6
pom.xml
6
pom.xml
|
@ -4,13 +4,13 @@
|
|||
<modelVersion>4.0.0</modelVersion>
|
||||
<!-- A good example on why temporary names for project identification shouldn't be used -->
|
||||
<groupId>LibsDisguises</groupId>
|
||||
<artifactId>LibsDisguises</artifactId>
|
||||
<artifactId>parent</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
<version>10.0.27-SNAPSHOT</version>
|
||||
|
||||
<modules>
|
||||
<module>shared</module>
|
||||
<module>v1_17_R1</module>
|
||||
<module>v1_18_R1</module>
|
||||
<module>nms</module>
|
||||
<module>plugin</module>
|
||||
</modules>
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>LibsDisguises</artifactId>
|
||||
<artifactId>parent</artifactId>
|
||||
<groupId>LibsDisguises</groupId>
|
||||
<version>10.0.27-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
|
Loading…
Reference in a new issue