初始化项目#2

This commit is contained in:
叁玖领域 2025-10-15 01:17:02 +08:00
parent 32ec10cfeb
commit f8ccd1a673
15 changed files with 220 additions and 16 deletions

View File

@ -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.

BIN
libs/lib39-1.20.1-0.0.8.jar Normal file

Binary file not shown.

View File

@ -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);
}
}
}

View File

@ -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);

View File

@ -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<Integer, AnimationProperties> SEAT_ANIMATIONS = new HashMap<>();
@Override
public void playerSeatAnimation(Player player, Integer animationId) {
}
@Override
public void removeSeatAnimation(Player player) {
}
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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<AbstractPlayerDungeonData> {
public static Set<AbstractPlayerDungeonData> playerDungeons = new HashSet<>();
@Override
public Set<AbstractPlayerDungeonData> getSyncSet() {
return playerDungeons;
}
}

View File

@ -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) {
}
}

View File

@ -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<CompoundTag> {
private final AbstractPlayerDungeonData instance;
private final LazyOptional<AbstractPlayerDungeonData> optional;
public PlayerDungeonDataProvider(final Player player) {
this.instance = new PlayerDungeonData(player);
this.optional = LazyOptional.of(() -> this.instance);
}
@Override
public @NotNull <T> LazyOptional<T> getCapability(@NotNull Capability<T> 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);
}
}

View File

@ -1,4 +0,0 @@
package top.r3944realms.eroticdungeongame.content.device;
public class SeatSessionManager {
}

View File

@ -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) {

View File

@ -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<AbstractPlayerDungeonData> 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));
}
}
}

View File

@ -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<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, EroticDungeon.MOD_ID);
public static void register(IEventBus eventBus) {
ITEMS.register(eventBus);
}
}

View File

@ -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;