diff --git a/gradle.properties b/gradle.properties index b3161a27..f252f6f6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -29,7 +29,7 @@ player_anim_version=1.0.2-rc1+1.20 bend geckolib_version=4.2.1 curios_version=5.5.0+1.20.1 -lib39_version=0.0.7 +lib39_version=0.0.8 ## Mod Properties # The unique mod identifier for the mod. Must be lowercase in English locale. Must fit the regex [a-z][a-z0-9_]{1,63} # Must match the String constant located in the main mod class annotated with @Mod. diff --git a/libs/lib39-1.20.1-0.0.8.jar b/libs/lib39-1.20.1-0.0.8.jar new file mode 100644 index 00000000..6c3b0f30 Binary files /dev/null and b/libs/lib39-1.20.1-0.0.8.jar differ diff --git a/src/main/java/top/r3944realms/eroticdungeongame/CommonHandler.java b/src/main/java/top/r3944realms/eroticdungeongame/CommonHandler.java index 5521200b..e8a55147 100644 --- a/src/main/java/top/r3944realms/eroticdungeongame/CommonHandler.java +++ b/src/main/java/top/r3944realms/eroticdungeongame/CommonHandler.java @@ -1,10 +1,38 @@ package top.r3944realms.eroticdungeongame; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent; +import net.minecraftforge.event.AttachCapabilitiesEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import top.r3944realms.eroticdungeongame.content.capability.DungeonDataSyncManager; +import top.r3944realms.eroticdungeongame.content.register.EDGCapabilities; +import top.r3944realms.lib39.api.event.SyncManagerRegisterEvent; + public class CommonHandler { + @net.minecraftforge.fml.common.Mod.EventBusSubscriber(modid = EroticDungeon.MOD_ID, bus = net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus.FORGE) public static class Game extends CommonHandler { + public static DungeonDataSyncManager dungeonDataSyncManager; + public static ResourceLocation DUNGEON_SYNC = EroticDungeon.rl("dungeon_sync"); + @SubscribeEvent + public static void attachCapability(AttachCapabilitiesEvent event) { + EDGCapabilities.attachCapability(event); + } + + @SubscribeEvent + public static void syncCapabilities(SyncManagerRegisterEvent event) { + dungeonDataSyncManager = new DungeonDataSyncManager(); + event.registerSyncManager(DUNGEON_SYNC, dungeonDataSyncManager, EDGCapabilities.PLAYER_DUNGEON_DATA_CAP); + } } + @net.minecraftforge.fml.common.Mod.EventBusSubscriber(modid = EroticDungeon.MOD_ID, bus = net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus.MOD) + public static class Mod extends CommonHandler { + @SubscribeEvent + public static void registerCapability(RegisterCapabilitiesEvent event) { + EDGCapabilities.registerCapability(event); + } + } } diff --git a/src/main/java/top/r3944realms/eroticdungeongame/EroticDungeon.java b/src/main/java/top/r3944realms/eroticdungeongame/EroticDungeon.java index 97a2cee9..8a5a3eb0 100644 --- a/src/main/java/top/r3944realms/eroticdungeongame/EroticDungeon.java +++ b/src/main/java/top/r3944realms/eroticdungeongame/EroticDungeon.java @@ -6,10 +6,7 @@ import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import top.r3944realms.eroticdungeongame.content.register.EDGBlockEntities; -import top.r3944realms.eroticdungeongame.content.register.EDGBlocks; -import top.r3944realms.eroticdungeongame.content.register.EDGCreativeTabs; -import top.r3944realms.eroticdungeongame.content.register.EDGEntities; +import top.r3944realms.eroticdungeongame.content.register.*; @Mod(EroticDungeon.MOD_ID) public class EroticDungeon { @@ -20,6 +17,7 @@ public class EroticDungeon { initialize(eventBus); } public static void initialize(IEventBus eventBus) { + EDGItems.register(eventBus); EDGBlocks.register(eventBus); EDGBlockEntities.register(eventBus); EDGCreativeTabs.register(eventBus); diff --git a/src/main/java/top/r3944realms/eroticdungeongame/content/animation/AnimationHandler.java b/src/main/java/top/r3944realms/eroticdungeongame/content/animation/AnimationHandler.java index ec0109b7..5180f489 100644 --- a/src/main/java/top/r3944realms/eroticdungeongame/content/animation/AnimationHandler.java +++ b/src/main/java/top/r3944realms/eroticdungeongame/content/animation/AnimationHandler.java @@ -1,4 +1,24 @@ package top.r3944realms.eroticdungeongame.content.animation; -public class AnimationHandler implements IAnimationHandler { +import net.minecraft.world.entity.player.Player; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.HashMap; +import java.util.Map; + +public enum AnimationHandler implements IAnimationHandler { + INSTANCE; + public static final Logger LOGGER = LoggerFactory.getLogger(ClientAnimationHandler.class); + public final Map SEAT_ANIMATIONS = new HashMap<>(); + + @Override + public void playerSeatAnimation(Player player, Integer animationId) { + + } + + @Override + public void removeSeatAnimation(Player player) { + + } } diff --git a/src/main/java/top/r3944realms/eroticdungeongame/content/animation/IAnimationHandler.java b/src/main/java/top/r3944realms/eroticdungeongame/content/animation/IAnimationHandler.java index 5452895a..7fb3ffa0 100644 --- a/src/main/java/top/r3944realms/eroticdungeongame/content/animation/IAnimationHandler.java +++ b/src/main/java/top/r3944realms/eroticdungeongame/content/animation/IAnimationHandler.java @@ -1,7 +1,10 @@ package top.r3944realms.eroticdungeongame.content.animation; -public interface IAnimationHandler { - default void loadAllAnimations() { +import net.minecraft.world.entity.player.Player; - } +public interface IAnimationHandler { + String CURRENT_ANIMATION_KEY = "currentAnimation"; + default void loadAllAnimations() {} + void playerSeatAnimation(Player player, Integer animationId); + void removeSeatAnimation(Player player); } diff --git a/src/main/java/top/r3944realms/eroticdungeongame/content/capability/AbstractPlayerDungeonData.java b/src/main/java/top/r3944realms/eroticdungeongame/content/capability/AbstractPlayerDungeonData.java new file mode 100644 index 00000000..e5e8c88e --- /dev/null +++ b/src/main/java/top/r3944realms/eroticdungeongame/content/capability/AbstractPlayerDungeonData.java @@ -0,0 +1,17 @@ +package top.r3944realms.eroticdungeongame.content.capability; + +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import top.r3944realms.lib39.core.sync.NBTSyncData; + +public abstract class AbstractPlayerDungeonData extends NBTSyncData { + protected AbstractPlayerDungeonData(ResourceLocation id) { + super(id); + } + + abstract Integer getSeatAnimId(); + abstract void setSeatAnimId(Integer seatAnimId); + + abstract BlockPos getSeatPosition(); + abstract void setSeatPosition(BlockPos seatPosition); +} diff --git a/src/main/java/top/r3944realms/eroticdungeongame/content/capability/DungeonDataSyncManager.java b/src/main/java/top/r3944realms/eroticdungeongame/content/capability/DungeonDataSyncManager.java new file mode 100644 index 00000000..9760702e --- /dev/null +++ b/src/main/java/top/r3944realms/eroticdungeongame/content/capability/DungeonDataSyncManager.java @@ -0,0 +1,14 @@ +package top.r3944realms.eroticdungeongame.content.capability; + +import top.r3944realms.lib39.core.sync.ISyncManager; + +import java.util.HashSet; +import java.util.Set; + +public class DungeonDataSyncManager implements ISyncManager { + public static Set playerDungeons = new HashSet<>(); + @Override + public Set getSyncSet() { + return playerDungeons; + } +} diff --git a/src/main/java/top/r3944realms/eroticdungeongame/content/capability/PlayerDungeonData.java b/src/main/java/top/r3944realms/eroticdungeongame/content/capability/PlayerDungeonData.java new file mode 100644 index 00000000..facb4b06 --- /dev/null +++ b/src/main/java/top/r3944realms/eroticdungeongame/content/capability/PlayerDungeonData.java @@ -0,0 +1,59 @@ +package top.r3944realms.eroticdungeongame.content.capability; + +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Player; +import top.r3944realms.eroticdungeongame.EroticDungeon; +import top.r3944realms.eroticdungeongame.content.register.EDGCapabilities; +import top.r3944realms.lib39.core.network.NetworkHandler; +import top.r3944realms.lib39.core.network.toClient.SyncNBTDataS2CPack; + +public final class PlayerDungeonData extends AbstractPlayerDungeonData { + public final Player player; + + PlayerDungeonData(Player player) { + super(EroticDungeon.rl(EDGCapabilities.DUNGEON_DATA)); + this.player = player; + } + + @Override + public CompoundTag serializeNBT() { + return null; + } + + @Override + public void deserializeNBT(CompoundTag compoundTag) { + + } + + @Override + public void checkIfDirtyThenUpdate() { + if (isDirty()) { + NetworkHandler.sendToPlayer(new SyncNBTDataS2CPack(player.getId(), id(), this), (ServerPlayer)player); + } + } + + @Override + public Integer getSeatAnimId() { + return 0; + } + + @Override + public void setSeatAnimId(Integer seatAnimId) { + + } + + @Override + public BlockPos getSeatPosition() { + return null; + } + + @Override + public void setSeatPosition(BlockPos seatPosition) { + + } + + + +} diff --git a/src/main/java/top/r3944realms/eroticdungeongame/content/capability/PlayerDungeonDataProvider.java b/src/main/java/top/r3944realms/eroticdungeongame/content/capability/PlayerDungeonDataProvider.java new file mode 100644 index 00000000..a54210c4 --- /dev/null +++ b/src/main/java/top/r3944realms/eroticdungeongame/content/capability/PlayerDungeonDataProvider.java @@ -0,0 +1,36 @@ +package top.r3944realms.eroticdungeongame.content.capability; + +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.player.Player; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilitySerializable; +import net.minecraftforge.common.util.LazyOptional; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import top.r3944realms.eroticdungeongame.content.register.EDGCapabilities; + +public class PlayerDungeonDataProvider implements ICapabilitySerializable { + private final AbstractPlayerDungeonData instance; + private final LazyOptional optional; + + public PlayerDungeonDataProvider(final Player player) { + this.instance = new PlayerDungeonData(player); + this.optional = LazyOptional.of(() -> this.instance); + } + + @Override + public @NotNull LazyOptional getCapability(@NotNull Capability capability, @Nullable Direction direction) { + return EDGCapabilities.PLAYER_DUNGEON_DATA_CAP.orEmpty(capability, this.optional); + } + + @Override + public CompoundTag serializeNBT() { + return instance.serializeNBT(); + } + + @Override + public void deserializeNBT(CompoundTag compoundTag) { + instance.deserializeNBT(compoundTag); + } +} diff --git a/src/main/java/top/r3944realms/eroticdungeongame/content/device/SeatSessionManager.java b/src/main/java/top/r3944realms/eroticdungeongame/content/device/SeatSessionManager.java deleted file mode 100644 index 1f4ba471..00000000 --- a/src/main/java/top/r3944realms/eroticdungeongame/content/device/SeatSessionManager.java +++ /dev/null @@ -1,4 +0,0 @@ -package top.r3944realms.eroticdungeongame.content.device; - -public class SeatSessionManager { -} diff --git a/src/main/java/top/r3944realms/eroticdungeongame/content/entity/SeatEntity.java b/src/main/java/top/r3944realms/eroticdungeongame/content/entity/SeatEntity.java index 53078682..10f67496 100644 --- a/src/main/java/top/r3944realms/eroticdungeongame/content/entity/SeatEntity.java +++ b/src/main/java/top/r3944realms/eroticdungeongame/content/entity/SeatEntity.java @@ -60,7 +60,9 @@ public class SeatEntity extends Entity { @Override public void onPassengerTurned(@NotNull Entity passenger) { super.onPassengerTurned(passenger); - + if(passenger instanceof LivingEntity livingEntity){ + limitPassengerRotation(livingEntity); + } // // 如果不是笼子类型的座椅,限制乘客的旋转 (未做) // if (!SeatType.CAGE.equals(FurnitureHelper.get(this)) && // passenger instanceof LivingEntity livingEntity) { diff --git a/src/main/java/top/r3944realms/eroticdungeongame/content/register/EDGCapabilities.java b/src/main/java/top/r3944realms/eroticdungeongame/content/register/EDGCapabilities.java new file mode 100644 index 00000000..29b30fa9 --- /dev/null +++ b/src/main/java/top/r3944realms/eroticdungeongame/content/register/EDGCapabilities.java @@ -0,0 +1,27 @@ +package top.r3944realms.eroticdungeongame.content.register; + +import net.minecraft.world.entity.player.Player; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.CapabilityManager; +import net.minecraftforge.common.capabilities.CapabilityToken; +import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent; +import net.minecraftforge.event.AttachCapabilitiesEvent; +import org.jetbrains.annotations.NotNull; +import top.r3944realms.eroticdungeongame.EroticDungeon; +import top.r3944realms.eroticdungeongame.content.capability.AbstractPlayerDungeonData; +import top.r3944realms.eroticdungeongame.content.capability.PlayerDungeonDataProvider; + +public class EDGCapabilities { + public static final Capability PLAYER_DUNGEON_DATA_CAP = CapabilityManager.get(new CapabilityToken<>() {}); + public static final String DUNGEON_DATA = "dungeon_data"; + + public static void registerCapability(@NotNull RegisterCapabilitiesEvent event) { + event.register(AbstractPlayerDungeonData.class); + } + + public static void attachCapability(@NotNull AttachCapabilitiesEvent event) { + if (event.getObject() instanceof Player player) { + event.addCapability(EroticDungeon.rl(DUNGEON_DATA), new PlayerDungeonDataProvider(player)); + } + } +} diff --git a/src/main/java/top/r3944realms/eroticdungeongame/content/register/EDGItems.java b/src/main/java/top/r3944realms/eroticdungeongame/content/register/EDGItems.java index b7259a0e..a04c1d68 100644 --- a/src/main/java/top/r3944realms/eroticdungeongame/content/register/EDGItems.java +++ b/src/main/java/top/r3944realms/eroticdungeongame/content/register/EDGItems.java @@ -1,6 +1,7 @@ package top.r3944realms.eroticdungeongame.content.register; import net.minecraft.world.item.Item; +import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import top.r3944realms.eroticdungeongame.EroticDungeon; @@ -8,4 +9,7 @@ import top.r3944realms.eroticdungeongame.EroticDungeon; public class EDGItems { public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, EroticDungeon.MOD_ID); + public static void register(IEventBus eventBus) { + ITEMS.register(eventBus); + } } diff --git a/src/main/java/top/r3944realms/eroticdungeongame/content/util/FurnitureHelper.java b/src/main/java/top/r3944realms/eroticdungeongame/content/util/FurnitureHelper.java index f5b5475d..66cd0e08 100644 --- a/src/main/java/top/r3944realms/eroticdungeongame/content/util/FurnitureHelper.java +++ b/src/main/java/top/r3944realms/eroticdungeongame/content/util/FurnitureHelper.java @@ -60,9 +60,9 @@ public class FurnitureHelper { .orElse(null); } - public static boolean isPlayerBound(UUID playerUuid) { + public static boolean isPlayerBound(UUID playerUUID) { return DeviceManager.getInstance().entrySet().stream() - .anyMatch(entry -> entry.getValue().getBoundPlayerUuid().equals(playerUuid)); + .anyMatch(entry -> entry.getValue().getBoundPlayerUuid().equals(playerUUID)); } public static void releasePlayerFromDevice(Player player) { SeatBlockEntity deviceBlockEntity;