more stuff
This commit is contained in:
		
							parent
							
								
									ae21d85740
								
							
						
					
					
						commit
						5130a65a0f
					
				
					 7 changed files with 150 additions and 12 deletions
				
			
		|  | @ -5,17 +5,13 @@ | |||
|   </component> | ||||
|   <component name="ChangeListManager"> | ||||
|     <list default="true" id="9d5d9b6f-43c8-41a4-bb42-a66ffc96c9b0" name="Changes" comment=""> | ||||
|       <change afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/extras/Color.java" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/extras/DyeColor.java" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/extras/Rotation.java" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/utils/Check.java" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/platforms/spigot/src/main/java/me/tofaa/entitylib/spigot/ExtraConversionUtil.java" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/APIConfig.java" beforeDir="false" afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/APIConfig.java" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/meta/mobs/tameable/CatMeta.java" beforeDir="false" afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/meta/mobs/tameable/CatMeta.java" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperEntityCreature.java" beforeDir="false" afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperEntityCreature.java" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/wrapper/ai/AIGroup.java" beforeDir="false" afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/wrapper/ai/AIGroup.java" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/common/src/main/java/me/tofaa/entitylib/common/AbstractWorldWrapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/common/src/main/java/me/tofaa/entitylib/common/AbstractWorldWrapper.java" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/test-plugin/build.gradle" beforeDir="false" afterPath="$PROJECT_DIR$/test-plugin/build.gradle" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/test-plugin/src/main/java/me/tofaa/testentitylib/TestEntityLibPlugin.java" beforeDir="false" afterPath="$PROJECT_DIR$/test-plugin/src/main/java/me/tofaa/testentitylib/TestEntityLibPlugin.java" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/EntityLibAPI.java" beforeDir="false" afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/EntityLibAPI.java" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperEntity.java" beforeDir="false" afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperEntity.java" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/wrapper/hologram/Hologram.java" beforeDir="false" afterPath="$PROJECT_DIR$/api/src/main/java/me/tofaa/entitylib/wrapper/hologram/Hologram.java" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/platforms/spigot/src/main/java/me/tofaa/entitylib/spigot/SpigotWorld.java" beforeDir="false" afterPath="$PROJECT_DIR$/platforms/spigot/src/main/java/me/tofaa/entitylib/spigot/SpigotWorld.java" afterDir="false" /> | ||||
|     </list> | ||||
|     <option name="SHOW_DIALOG" value="false" /> | ||||
|     <option name="HIGHLIGHT_CONFLICTS" value="true" /> | ||||
|  | @ -299,6 +295,7 @@ | |||
|       <workItem from="1706696719616" duration="4783000" /> | ||||
|       <workItem from="1706784821835" duration="7882000" /> | ||||
|       <workItem from="1706858181164" duration="925000" /> | ||||
|       <workItem from="1707159905372" duration="3391000" /> | ||||
|     </task> | ||||
|     <servers /> | ||||
|   </component> | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ package me.tofaa.entitylib; | |||
| 
 | ||||
| import com.github.retrooper.packetevents.PacketEventsAPI; | ||||
| import me.tofaa.entitylib.tick.TickContainer; | ||||
| import me.tofaa.entitylib.wrapper.WrapperEntity; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
| 
 | ||||
| import java.util.Collection; | ||||
|  | @ -25,6 +26,7 @@ public interface EntityLibAPI<W, T> { | |||
| 
 | ||||
|     void onEnable(); | ||||
| 
 | ||||
| 
 | ||||
|     /** | ||||
|      * Creates a wrapped world for the platform specific world. | ||||
|      * @param world The platform specific world handle. | ||||
|  |  | |||
							
								
								
									
										64
									
								
								api/src/main/java/me/tofaa/entitylib/utils/Check.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								api/src/main/java/me/tofaa/entitylib/utils/Check.java
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,64 @@ | |||
| package me.tofaa.entitylib.utils; | ||||
| 
 | ||||
| import org.jetbrains.annotations.Contract; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
| import org.jetbrains.annotations.Nullable; | ||||
| 
 | ||||
| import java.text.MessageFormat; | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| /** | ||||
|  * Convenient class to check for common exceptions. Taken from <a href="https://minestom.net/">Minestom</a> | ||||
|  */ | ||||
| public final class Check { | ||||
| 
 | ||||
|     private Check() {} | ||||
| 
 | ||||
|     @Contract("null, _ -> fail") | ||||
|     public static void notNull(@Nullable Object object, @NotNull String reason) { | ||||
|         if (Objects.isNull(object)) { | ||||
|             throw new NullPointerException(reason); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     @Contract("null, _, _ -> fail") | ||||
|     public static void notNull(@Nullable Object object, @NotNull String reason, Object... arguments) { | ||||
|         if (Objects.isNull(object)) { | ||||
|             throw new NullPointerException(MessageFormat.format(reason, arguments)); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     @Contract("true, _ -> fail") | ||||
|     public static void argCondition(boolean condition, @NotNull String reason) { | ||||
|         if (condition) { | ||||
|             throw new IllegalArgumentException(reason); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     @Contract("true, _, _ -> fail") | ||||
|     public static void argCondition(boolean condition, @NotNull String reason, Object... arguments) { | ||||
|         if (condition) { | ||||
|             throw new IllegalArgumentException(MessageFormat.format(reason, arguments)); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     @Contract("_ -> fail") | ||||
|     public static void fail(@NotNull String reason) { | ||||
|         throw new IllegalArgumentException(reason); | ||||
|     } | ||||
| 
 | ||||
|     @Contract("true, _ -> fail") | ||||
|     public static void stateCondition(boolean condition, @NotNull String reason) { | ||||
|         if (condition) { | ||||
|             throw new IllegalStateException(reason); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     @Contract("true, _, _ -> fail") | ||||
|     public static void stateCondition(boolean condition, @NotNull String reason, Object... arguments) { | ||||
|         if (condition) { | ||||
|             throw new IllegalStateException(MessageFormat.format(reason, arguments)); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | @ -45,6 +45,10 @@ public class WrapperEntity implements Tickable { | |||
|         this.viewers = new HashSet<>(); | ||||
|     } | ||||
| 
 | ||||
|     public boolean spawn(Location location) { | ||||
|         return spawn(null, location); | ||||
|     } | ||||
| 
 | ||||
|     public boolean spawn(WorldWrapper<?> world, Location location) { | ||||
|         if (spawned) return false; | ||||
|         this.location = location; | ||||
|  | @ -117,6 +121,14 @@ public class WrapperEntity implements Tickable { | |||
|         teleport(world, location, onGround); | ||||
|     } | ||||
| 
 | ||||
|     public void teleport(@NotNull Location location, boolean onGround) { | ||||
|         teleport(null, location, onGround); | ||||
|     } | ||||
| 
 | ||||
|     public void teleport(@NotNull Location location) { | ||||
|         teleport(null, location, onGround); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Adds a viewer to the viewers set. The viewer will receive all packets and be informed of this addition | ||||
|      * @param uuid the uuid of the user to add | ||||
|  | @ -160,6 +172,10 @@ public class WrapperEntity implements Tickable { | |||
|         addViewerSilently(user.getUUID()); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Removes a viewer from the viewers set of this entity. The viewer will be informed of this removal and will no longer receive any packets | ||||
|      * @param UUID the uuid of the user to remove | ||||
|      */ | ||||
|     public void removeViewer(UUID uuid) { | ||||
|         if (!viewers.remove(uuid)) { | ||||
|             return; | ||||
|  | @ -167,6 +183,10 @@ public class WrapperEntity implements Tickable { | |||
|         sendPacket(uuid, new WrapperPlayServerDestroyEntities(entityId)); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Removes a viewer from the viewers set of this entity. The viewer will be informed of this removal and will no longer receive any packets | ||||
|      * @param user the user to remove | ||||
|      */ | ||||
|     public void removeViewer(User user) { | ||||
|         removeViewer(user.getUUID()); | ||||
|     } | ||||
|  |  | |||
|  | @ -22,7 +22,6 @@ public interface Hologram<W> { | |||
|         return new LegacyHologram<>(world, location, lines); | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     @NotNull Location getLocation(); | ||||
| 
 | ||||
|     @NotNull WorldWrapper<W> getWorld(); | ||||
|  |  | |||
|  | @ -0,0 +1,23 @@ | |||
| package me.tofaa.entitylib.spigot; | ||||
| 
 | ||||
| import com.github.retrooper.packetevents.protocol.entity.pose.EntityPose; | ||||
| import com.github.retrooper.packetevents.protocol.player.HumanoidArm; | ||||
| import org.bukkit.entity.Pose; | ||||
| import org.bukkit.inventory.MainHand; | ||||
| 
 | ||||
| public final class ExtraConversionUtil { | ||||
| 
 | ||||
|     private ExtraConversionUtil() { | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     public static EntityPose fromBukkitPose(Pose pose) { | ||||
|         return EntityPose.values()[pose.ordinal()]; | ||||
|     } | ||||
| 
 | ||||
|     public static HumanoidArm fromBukkitHand(MainHand hand) { | ||||
|         if (hand == MainHand.RIGHT) return HumanoidArm.RIGHT; | ||||
|         return HumanoidArm.LEFT; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | @ -4,8 +4,17 @@ import com.github.retrooper.packetevents.protocol.world.Location; | |||
| import com.github.retrooper.packetevents.protocol.world.states.WrappedBlockState; | ||||
| import io.github.retrooper.packetevents.util.SpigotConversionUtil; | ||||
| import me.tofaa.entitylib.common.AbstractWorldWrapper; | ||||
| import me.tofaa.entitylib.meta.EntityMeta; | ||||
| import me.tofaa.entitylib.meta.types.LivingEntityMeta; | ||||
| import me.tofaa.entitylib.meta.types.PlayerMeta; | ||||
| import me.tofaa.entitylib.utils.Check; | ||||
| import me.tofaa.entitylib.wrapper.WrapperEntity; | ||||
| import net.kyori.adventure.text.Component; | ||||
| import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; | ||||
| import org.bukkit.World; | ||||
| import org.bukkit.entity.Entity; | ||||
| import org.bukkit.entity.LivingEntity; | ||||
| import org.bukkit.entity.Player; | ||||
| import org.jetbrains.annotations.NotNull; | ||||
| 
 | ||||
| public class SpigotWorld extends AbstractWorldWrapper<World> { | ||||
|  | @ -18,7 +27,31 @@ public class SpigotWorld extends AbstractWorldWrapper<World> { | |||
| 
 | ||||
|     @Override | ||||
|     public <T extends WrapperEntity> @NotNull T cloneEntity(@NotNull Object platformEntity, @NotNull Location location) { | ||||
|         return null; | ||||
|         Check.stateCondition(!(platformEntity instanceof Entity), "Entity must be a Bukkit entity"); | ||||
|         Entity e = (Entity) platformEntity; | ||||
|         EntityMeta meta = EntityMeta.createMeta(e.getEntityId(), SpigotConversionUtil.fromBukkitEntityType(e.getType())); | ||||
|         meta.setHasNoGravity(!e.hasGravity()); | ||||
|         meta.setCustomNameVisible(e.isCustomNameVisible()); | ||||
|         meta.setCustomName(LegacyComponentSerializer.legacyAmpersand().deserialize(e.getCustomName())); | ||||
|         meta.setPose(ExtraConversionUtil.fromBukkitPose(e.getPose())); | ||||
|         meta.setOnFire(e.getFireTicks() > 0); | ||||
|         meta.setSilent(e.isSilent()); | ||||
|         meta.setHasGlowingEffect(e.isGlowing()); | ||||
|         if (e instanceof LivingEntity) { | ||||
|             LivingEntity le = (LivingEntity) e; | ||||
|             LivingEntityMeta lm = (LivingEntityMeta) meta; | ||||
|             lm.setHealth((float) le.getHealth()); | ||||
|             lm.setFlyingWithElytra(le.isGliding()); | ||||
|         } | ||||
|         if (e instanceof Player) { | ||||
|             Player p = (Player) e; | ||||
|             PlayerMeta pm = (PlayerMeta) meta; | ||||
|             pm.setSneaking(p.isSneaking()); | ||||
|             pm.setSprinting(p.isSprinting()); | ||||
|             pm.setSwimming(p.isSwimming()); | ||||
|             pm.setActiveHand(ExtraConversionUtil.fromBukkitHand(p.getMainHand())); | ||||
|         } | ||||
|         return null; // TODO; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue