lots of linter stuff mostly

This commit is contained in:
candle 2025-05-10 16:52:22 -04:00
parent d6f599e03b
commit eb90d2f6ec
9 changed files with 152 additions and 128 deletions

View File

@ -8,9 +8,11 @@ import net.minecraft.server.MinecraftServer;
import net.minecraft.world.level.saveddata.SavedData; import net.minecraft.world.level.saveddata.SavedData;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import org.jetbrains.annotations.NotNull;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Objects;
public class SuitcaseRegistryState extends SavedData { public class SuitcaseRegistryState extends SavedData {
private static final String REGISTRY_KEY = "travelers_suitcase_registry"; private static final String REGISTRY_KEY = "travelers_suitcase_registry";
@ -21,11 +23,20 @@ public class SuitcaseRegistryState extends SavedData {
} }
@Override @Override
public CompoundTag save(CompoundTag nbt) { public @NotNull CompoundTag save(@NotNull CompoundTag nbt) {
ListTag keystonesList = new ListTag(); ListTag keystonesList = new ListTag();
for (Map.Entry<String, Map<String, BlockPos>> keystoneEntry : registry.entrySet()) { for (Map.Entry<String, Map<String, BlockPos>> keystoneEntry : registry.entrySet()) {
CompoundTag keystoneNbt = new CompoundTag(); CompoundTag keystoneNbt = new CompoundTag();
keystoneNbt.putString("KeystoneName", keystoneEntry.getKey()); keystoneNbt.putString("KeystoneName", keystoneEntry.getKey());
ListTag playersList = getPlayersList(keystoneEntry);
keystoneNbt.put("Players", playersList);
keystonesList.add(keystoneNbt);
}
nbt.put("SuitcaseRegistry", keystonesList);
return nbt;
}
private static @NotNull ListTag getPlayersList(Map.Entry<String, Map<String, BlockPos>> keystoneEntry) {
ListTag playersList = new ListTag(); ListTag playersList = new ListTag();
for (Map.Entry<String, BlockPos> playerEntry : keystoneEntry.getValue().entrySet()) { for (Map.Entry<String, BlockPos> playerEntry : keystoneEntry.getValue().entrySet()) {
CompoundTag playerNbt = new CompoundTag(); CompoundTag playerNbt = new CompoundTag();
@ -37,11 +48,7 @@ public class SuitcaseRegistryState extends SavedData {
playersList.add(playerNbt); playersList.add(playerNbt);
} }
keystoneNbt.put("Players", playersList); return playersList;
keystonesList.add(keystoneNbt);
}
nbt.put("SuitcaseRegistry", keystonesList);
return nbt;
} }
public static SuitcaseRegistryState load(CompoundTag nbt) { public static SuitcaseRegistryState load(CompoundTag nbt) {
@ -70,7 +77,11 @@ public class SuitcaseRegistryState extends SavedData {
} }
public static SuitcaseRegistryState getState(MinecraftServer server) { public static SuitcaseRegistryState getState(MinecraftServer server) {
return server.getLevel(Level.OVERWORLD).getDataStorage() return Objects.requireNonNull(server.getLevel(Level.OVERWORLD)).getDataStorage()
.computeIfAbsent(SuitcaseRegistryState::load, SuitcaseRegistryState::new, REGISTRY_KEY); .computeIfAbsent(SuitcaseRegistryState::load, SuitcaseRegistryState::new, REGISTRY_KEY);
} }
public Map<String, Map<String, BlockPos>> getRegistry() {
return this.registry;
}
} }

View File

@ -4,6 +4,8 @@ import io.lampnet.travelerssuitcase.block.ModBlocks;
import io.lampnet.travelerssuitcase.block.entity.ModBlockEntities; import io.lampnet.travelerssuitcase.block.entity.ModBlockEntities;
import io.lampnet.travelerssuitcase.item.ModItemGroups; import io.lampnet.travelerssuitcase.item.ModItemGroups;
import io.lampnet.travelerssuitcase.item.ModItems; import io.lampnet.travelerssuitcase.item.ModItems;
import io.lampnet.travelerssuitcase.block.entity.SuitcaseBlockEntity;
import io.lampnet.travelerssuitcase.SuitcaseRegistryState;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod;
@ -25,6 +27,8 @@ public class TravelersSuitcase {
ModBlockEntities.register(modEventBus); ModBlockEntities.register(modEventBus);
MinecraftForge.EVENT_BUS.addListener(this::onWorldLoad); MinecraftForge.EVENT_BUS.addListener(this::onWorldLoad);
MinecraftForge.EVENT_BUS.addListener(this::onServerStarting);
MinecraftForge.EVENT_BUS.addListener(this::onServerStopping);
LOGGER.info("Initializing " + MODID); LOGGER.info("Initializing " + MODID);
} }
@ -62,4 +66,15 @@ public class TravelersSuitcase {
} }
} }
} }
private void onServerStarting(net.minecraftforge.event.server.ServerStartingEvent event) {
SuitcaseRegistryState state = SuitcaseRegistryState.getState(event.getServer());
SuitcaseBlockEntity.initializeSuitcaseRegistry(state.getRegistry());
}
private void onServerStopping(net.minecraftforge.event.server.ServerStoppingEvent event) {
SuitcaseRegistryState state = SuitcaseRegistryState.getState(event.getServer());
SuitcaseBlockEntity.saveSuitcaseRegistryTo(state.getRegistry());
state.setDirty();
}
} }

View File

@ -21,12 +21,9 @@ public class ModBlocks {
public static final DeferredRegister<Block> BLOCKS = public static final DeferredRegister<Block> BLOCKS =
DeferredRegister.create(ForgeRegistries.BLOCKS, TravelersSuitcase.MODID); DeferredRegister.create(ForgeRegistries.BLOCKS, TravelersSuitcase.MODID);
private static ToIntFunction<BlockState> getLuminance(boolean openCheck) { private static ToIntFunction<BlockState> getLuminance() {
if (openCheck) {
return (state) -> state.getValue(SuitcaseBlock.OPEN) ? 8 : 0; return (state) -> state.getValue(SuitcaseBlock.OPEN) ? 8 : 0;
} }
return (state) -> 0;
}
private static ToIntFunction<BlockState> getPortalLuminance() { private static ToIntFunction<BlockState> getPortalLuminance() {
return (state) -> 10; return (state) -> 10;
} }
@ -36,37 +33,37 @@ public class ModBlocks {
.sound(SoundType.WOOL) .sound(SoundType.WOOL)
.strength(0.2f) .strength(0.2f)
.noOcclusion() .noOcclusion()
.lightLevel(getLuminance(true)))); .lightLevel(getLuminance())));
public static final RegistryObject<Block> WHITE_SUITCASE = registerBlock("white_suitcase", public static final RegistryObject<Block> WHITE_SUITCASE = registerBlock("white_suitcase",
() -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.WHITE_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance(true)))); () -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.WHITE_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance())));
public static final RegistryObject<Block> BLACK_SUITCASE = registerBlock("black_suitcase", public static final RegistryObject<Block> BLACK_SUITCASE = registerBlock("black_suitcase",
() -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.BLACK_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance(true)))); () -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.BLACK_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance())));
public static final RegistryObject<Block> LIGHT_GRAY_SUITCASE = registerBlock("light_gray_suitcase", public static final RegistryObject<Block> LIGHT_GRAY_SUITCASE = registerBlock("light_gray_suitcase",
() -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.LIGHT_GRAY_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance(true)))); () -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.LIGHT_GRAY_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance())));
public static final RegistryObject<Block> GRAY_SUITCASE = registerBlock("gray_suitcase", public static final RegistryObject<Block> GRAY_SUITCASE = registerBlock("gray_suitcase",
() -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.GRAY_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance(true)))); () -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.GRAY_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance())));
public static final RegistryObject<Block> RED_SUITCASE = registerBlock("red_suitcase", public static final RegistryObject<Block> RED_SUITCASE = registerBlock("red_suitcase",
() -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.RED_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance(true)))); () -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.RED_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance())));
public static final RegistryObject<Block> ORANGE_SUITCASE = registerBlock("orange_suitcase", public static final RegistryObject<Block> ORANGE_SUITCASE = registerBlock("orange_suitcase",
() -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.ORANGE_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance(true)))); () -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.ORANGE_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance())));
public static final RegistryObject<Block> YELLOW_SUITCASE = registerBlock("yellow_suitcase", public static final RegistryObject<Block> YELLOW_SUITCASE = registerBlock("yellow_suitcase",
() -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.YELLOW_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance(true)))); () -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.YELLOW_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance())));
public static final RegistryObject<Block> LIME_SUITCASE = registerBlock("lime_suitcase", public static final RegistryObject<Block> LIME_SUITCASE = registerBlock("lime_suitcase",
() -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.LIME_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance(true)))); () -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.LIME_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance())));
public static final RegistryObject<Block> GREEN_SUITCASE = registerBlock("green_suitcase", public static final RegistryObject<Block> GREEN_SUITCASE = registerBlock("green_suitcase",
() -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.GREEN_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance(true)))); () -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.GREEN_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance())));
public static final RegistryObject<Block> CYAN_SUITCASE = registerBlock("cyan_suitcase", public static final RegistryObject<Block> CYAN_SUITCASE = registerBlock("cyan_suitcase",
() -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.CYAN_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance(true)))); () -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.CYAN_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance())));
public static final RegistryObject<Block> LIGHT_BLUE_SUITCASE = registerBlock("light_blue_suitcase", public static final RegistryObject<Block> LIGHT_BLUE_SUITCASE = registerBlock("light_blue_suitcase",
() -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.LIGHT_BLUE_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance(true)))); () -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.LIGHT_BLUE_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance())));
public static final RegistryObject<Block> BLUE_SUITCASE = registerBlock("blue_suitcase", public static final RegistryObject<Block> BLUE_SUITCASE = registerBlock("blue_suitcase",
() -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.BLUE_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance(true)))); () -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.BLUE_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance())));
public static final RegistryObject<Block> PURPLE_SUITCASE = registerBlock("purple_suitcase", public static final RegistryObject<Block> PURPLE_SUITCASE = registerBlock("purple_suitcase",
() -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.PURPLE_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance(true)))); () -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.PURPLE_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance())));
public static final RegistryObject<Block> MAGENTA_SUITCASE = registerBlock("magenta_suitcase", public static final RegistryObject<Block> MAGENTA_SUITCASE = registerBlock("magenta_suitcase",
() -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.MAGENTA_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance(true)))); () -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.MAGENTA_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance())));
public static final RegistryObject<Block> PINK_SUITCASE = registerBlock("pink_suitcase", public static final RegistryObject<Block> PINK_SUITCASE = registerBlock("pink_suitcase",
() -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.PINK_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance(true)))); () -> new SuitcaseBlock(BlockBehaviour.Properties.copy(Blocks.PINK_WOOL).sound(SoundType.WOOL).strength(0.2f).noOcclusion().lightLevel(getLuminance())));
public static final RegistryObject<Block> PORTAL = registerBlock("portal", public static final RegistryObject<Block> PORTAL = registerBlock("portal",
() -> new PocketPortalBlock(BlockBehaviour.Properties.copy(Blocks.NETHER_PORTAL) () -> new PocketPortalBlock(BlockBehaviour.Properties.copy(Blocks.NETHER_PORTAL)

View File

@ -26,10 +26,12 @@ import net.minecraft.world.level.chunk.LevelChunk;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.nbt.Tag; import net.minecraft.nbt.Tag;
import org.jetbrains.annotations.NotNull;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
public class PocketPortalBlock extends Block { public class PocketPortalBlock extends Block {
private static final Map<String, PlayerPositionData> LAST_KNOWN_POSITIONS = new HashMap<>(); private static final Map<String, PlayerPositionData> LAST_KNOWN_POSITIONS = new HashMap<>();
@ -63,7 +65,7 @@ public class PocketPortalBlock extends Block {
} }
private boolean attemptPlayerInventorySuitcaseTeleport(Level world, ServerLevel overworld, ServerPlayer player, String keystoneName) { private boolean attemptPlayerInventorySuitcaseTeleport(Level world, ServerLevel overworld, ServerPlayer player, String keystoneName) {
for (ServerPlayer serverPlayer : world.getServer().getPlayerList().getPlayers()) { for (ServerPlayer serverPlayer : Objects.requireNonNull(world.getServer()).getPlayerList().getPlayers()) {
if (scanPlayerInventoryForSuitcase(serverPlayer, player, keystoneName, world, overworld)) { if (scanPlayerInventoryForSuitcase(serverPlayer, player, keystoneName, world, overworld)) {
return true; return true;
} }
@ -127,7 +129,7 @@ public class PocketPortalBlock extends Block {
} }
@Override @Override
public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) { public void entityInside(@NotNull BlockState state, Level world, @NotNull BlockPos pos, @NotNull Entity entity) {
if (!world.isClientSide && entity instanceof ServerPlayer player) { if (!world.isClientSide && entity instanceof ServerPlayer player) {
ResourceLocation dimensionLocation = world.dimension().location(); ResourceLocation dimensionLocation = world.dimension().location();
String currentDimensionPath = dimensionLocation.getPath(); String currentDimensionPath = dimensionLocation.getPath();
@ -135,7 +137,7 @@ public class PocketPortalBlock extends Block {
String keystoneName = currentDimensionPath.replace("pocket_dimension_", ""); String keystoneName = currentDimensionPath.replace("pocket_dimension_", "");
preparePlayerForTeleport(player); preparePlayerForTeleport(player);
world.playSound(null, pos, SoundEvents.BUNDLE_DROP_CONTENTS, SoundSource.PLAYERS, 2.0f, 1.0f); world.playSound(null, pos, SoundEvents.BUNDLE_DROP_CONTENTS, SoundSource.PLAYERS, 2.0f, 1.0f);
ServerLevel overworld = world.getServer().getLevel(Level.OVERWORLD); ServerLevel overworld = Objects.requireNonNull(world.getServer()).getLevel(Level.OVERWORLD);
if (overworld == null) return; if (overworld == null) return;
boolean teleported = false; boolean teleported = false;
@ -189,8 +191,8 @@ public class PocketPortalBlock extends Block {
if (targetEntity instanceof SuitcaseBlockEntity suitcase) { if (targetEntity instanceof SuitcaseBlockEntity suitcase) {
SuitcaseBlockEntity.EnteredPlayerData exitData = suitcase.getExitPosition(player.getUUID().toString()); SuitcaseBlockEntity.EnteredPlayerData exitData = suitcase.getExitPosition(player.getUUID().toString());
if (exitData != null) { if (exitData != null) {
teleportToPosition(world, player, overworld, exitData.x, exitData.y, exitData.z, exitData.yaw, player.getXRot()); teleportToPosition(world, player, overworld, exitData.x(), exitData.y(), exitData.z(), exitData.yaw(), player.getXRot());
world.getServer().execute(() -> { Objects.requireNonNull(world.getServer()).execute(() -> {
overworld.setChunkForced(suitcaseChunkPos.x, suitcaseChunkPos.z, false); overworld.setChunkForced(suitcaseChunkPos.x, suitcaseChunkPos.z, false);
}); });
return true; return true;
@ -204,7 +206,7 @@ public class PocketPortalBlock extends Block {
// Method 2: Try to find the suitcase as an item entity in the world // Method 2: Try to find the suitcase as an item entity in the world
private boolean attemptSuitcaseItemTeleport(Level world, ServerLevel overworld, ServerPlayer player, String keystoneName) { private boolean attemptSuitcaseItemTeleport(Level world, ServerLevel overworld, ServerPlayer player, String keystoneName) {
BlockPos searchCenter = null; BlockPos searchCenter;
BlockPos suitcasePos = SuitcaseBlockEntity.findSuitcasePosition(keystoneName, player.getUUID().toString()); BlockPos suitcasePos = SuitcaseBlockEntity.findSuitcasePosition(keystoneName, player.getUUID().toString());
if (suitcasePos != null) { if (suitcasePos != null) {
searchCenter = suitcasePos; searchCenter = suitcasePos;
@ -280,9 +282,11 @@ public class PocketPortalBlock extends Block {
} }
private void updateItemLore(ItemStack stack, int playerCount) { private void updateItemLore(ItemStack stack, int playerCount) {
if (stack.hasTag() && stack.getTag().contains("display")) { if (stack.hasTag()) {
assert stack.getTag() != null;
if (stack.getTag().contains("display")) {
CompoundTag display = stack.getTag().getCompound("display"); CompoundTag display = stack.getTag().getCompound("display");
if (display != null && display.contains("Lore", Tag.TAG_LIST)) { if (display.contains("Lore", Tag.TAG_LIST)) {
ListTag lore = display.getList("Lore", Tag.TAG_STRING); ListTag lore = display.getList("Lore", Tag.TAG_STRING);
ListTag newLore = new ListTag(); ListTag newLore = new ListTag();
for (int i = 0; i < lore.size(); i++) { for (int i = 0; i < lore.size(); i++) {
@ -300,4 +304,5 @@ public class PocketPortalBlock extends Block {
} }
} }
} }
}
} }

View File

@ -48,11 +48,10 @@ import net.minecraft.world.level.Level;
import net.minecraft.world.Containers; import net.minecraft.world.Containers;
import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.DyeColor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.Collections;
import java.util.HashMap; import java.util.*;
import java.util.List;
import java.util.Map;
public class SuitcaseBlock extends BaseEntityBlock { public class SuitcaseBlock extends BaseEntityBlock {
public static final BooleanProperty OPEN = BooleanProperty.create("open"); public static final BooleanProperty OPEN = BooleanProperty.create("open");
@ -72,13 +71,13 @@ public class SuitcaseBlock extends BaseEntityBlock {
} }
@Override @Override
public RenderShape getRenderShape(BlockState pState) { public @NotNull RenderShape getRenderShape(@NotNull BlockState pState) {
return RenderShape.MODEL; return RenderShape.MODEL;
} }
@Nullable @Nullable
@Override @Override
public BlockEntity newBlockEntity(BlockPos pPos, BlockState pState) { public BlockEntity newBlockEntity(@NotNull BlockPos pPos, @NotNull BlockState pState) {
return new SuitcaseBlockEntity(pPos, pState); return new SuitcaseBlockEntity(pPos, pState);
} }
@ -88,7 +87,7 @@ public class SuitcaseBlock extends BaseEntityBlock {
} }
@Override @Override
public void setPlacedBy(Level world, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack itemStack) { public void setPlacedBy(@NotNull Level world, @NotNull BlockPos pos, @NotNull BlockState state, @Nullable LivingEntity placer, @NotNull ItemStack itemStack) {
super.setPlacedBy(world, pos, state, placer, itemStack); super.setPlacedBy(world, pos, state, placer, itemStack);
if (!world.isClientSide()) { if (!world.isClientSide()) {
BlockEntity blockEntity = world.getBlockEntity(pos); BlockEntity blockEntity = world.getBlockEntity(pos);
@ -100,11 +99,11 @@ public class SuitcaseBlock extends BaseEntityBlock {
if (keystoneName != null) { if (keystoneName != null) {
List<SuitcaseBlockEntity.EnteredPlayerData> players = suitcase.getEnteredPlayers(); List<SuitcaseBlockEntity.EnteredPlayerData> players = suitcase.getEnteredPlayers();
for (SuitcaseBlockEntity.EnteredPlayerData player : players) { for (SuitcaseBlockEntity.EnteredPlayerData player : players) {
suitcase.updatePlayerSuitcasePosition(player.uuid, pos); suitcase.updatePlayerSuitcasePosition(player.uuid(), pos);
Map<String, BlockPos> suitcases = SuitcaseBlockEntity.SUITCASE_REGISTRY.computeIfAbsent( Map<String, BlockPos> suitcases = SuitcaseBlockEntity.SUITCASE_REGISTRY.computeIfAbsent(
keystoneName, k -> new HashMap<>() keystoneName, k -> new HashMap<>()
); );
suitcases.put(player.uuid, pos); suitcases.put(player.uuid(), pos);
} }
} }
} }
@ -113,7 +112,7 @@ public class SuitcaseBlock extends BaseEntityBlock {
} }
@Override @Override
public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean isMoving) { public void onRemove(BlockState state, @NotNull Level world, @NotNull BlockPos pos, BlockState newState, boolean isMoving) {
if (!state.is(newState.getBlock())) { if (!state.is(newState.getBlock())) {
BlockEntity blockEntity = world.getBlockEntity(pos); BlockEntity blockEntity = world.getBlockEntity(pos);
if (blockEntity instanceof SuitcaseBlockEntity suitcase) { if (blockEntity instanceof SuitcaseBlockEntity suitcase) {
@ -156,7 +155,7 @@ public class SuitcaseBlock extends BaseEntityBlock {
} }
@Override @Override
public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { public @NotNull InteractionResult use(@NotNull BlockState state, Level world, @NotNull BlockPos pos, @NotNull Player player, @NotNull InteractionHand hand, @NotNull BlockHitResult hit) {
if (world.isClientSide()) { if (world.isClientSide()) {
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} }
@ -230,7 +229,7 @@ public class SuitcaseBlock extends BaseEntityBlock {
} }
@Override @Override
public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) { public void entityInside(@NotNull BlockState state, Level world, @NotNull BlockPos pos, @NotNull Entity entity) {
if (!world.isClientSide() && entity instanceof ServerPlayer player) { if (!world.isClientSide() && entity instanceof ServerPlayer player) {
if (!state.getValue(OPEN) || !player.isShiftKeyDown()) { if (!state.getValue(OPEN) || !player.isShiftKeyDown()) {
return; return;
@ -246,7 +245,7 @@ public class SuitcaseBlock extends BaseEntityBlock {
String dimensionName = "pocket_dimension_" + keystoneName; String dimensionName = "pocket_dimension_" + keystoneName;
ResourceLocation dimensionRL = new ResourceLocation(TravelersSuitcase.MODID, dimensionName); ResourceLocation dimensionRL = new ResourceLocation(TravelersSuitcase.MODID, dimensionName);
ResourceKey<Level> dimensionKey = ResourceKey.create(Registries.DIMENSION, dimensionRL); ResourceKey<Level> dimensionKey = ResourceKey.create(Registries.DIMENSION, dimensionRL);
ServerLevel targetWorld = world.getServer().getLevel(dimensionKey); ServerLevel targetWorld = Objects.requireNonNull(world.getServer()).getLevel(dimensionKey);
if (targetWorld != null) { if (targetWorld != null) {
suitcase.playerEntered(player); suitcase.playerEntered(player);
player.stopRiding(); player.stopRiding();
@ -263,14 +262,13 @@ public class SuitcaseBlock extends BaseEntityBlock {
} }
@Override @Override
public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { public @NotNull VoxelShape getShape(BlockState state, @NotNull BlockGetter world, @NotNull BlockPos pos, @NotNull CollisionContext context) {
switch(state.getValue(FACING)) { return switch (state.getValue(FACING)) {
case NORTH: return SHAPE_N; case SOUTH -> SHAPE_S;
case SOUTH: return SHAPE_S; case EAST -> SHAPE_E;
case EAST: return SHAPE_E; case WEST -> SHAPE_W;
case WEST: return SHAPE_W; default -> SHAPE_N;
default: return SHAPE_N; };
}
} }
@Nullable @Nullable
@ -282,13 +280,13 @@ public class SuitcaseBlock extends BaseEntityBlock {
} }
@Override @Override
public ItemStack getCloneItemStack(BlockGetter world, BlockPos pos, BlockState state) { public @NotNull ItemStack getCloneItemStack(@NotNull BlockGetter world, @NotNull BlockPos pos, @NotNull BlockState state) {
ItemStack stack = super.getCloneItemStack(world, pos, state); ItemStack stack = super.getCloneItemStack(world, pos, state);
BlockEntity blockEntity = world.getBlockEntity(pos); BlockEntity blockEntity = world.getBlockEntity(pos);
if (blockEntity instanceof SuitcaseBlockEntity suitcase) { if (blockEntity instanceof SuitcaseBlockEntity suitcase) {
CompoundTag beNbt = new CompoundTag(); CompoundTag beNbt = new CompoundTag();
suitcase.saveAdditional(beNbt); suitcase.saveAdditional(beNbt);
if (beNbt != null && !beNbt.isEmpty()) { if (!beNbt.isEmpty()) {
BlockItem.setBlockEntityData(stack, ModBlockEntities.SUITCASE_BLOCK_ENTITY.get(), beNbt); BlockItem.setBlockEntityData(stack, ModBlockEntities.SUITCASE_BLOCK_ENTITY.get(), beNbt);
} }
@ -321,13 +319,13 @@ public class SuitcaseBlock extends BaseEntityBlock {
} }
@Override @Override
public List<ItemStack> getDrops(BlockState state, LootParams.Builder builder) { public @NotNull List<ItemStack> getDrops(@NotNull BlockState state, LootParams.Builder builder) {
ItemStack stack = new ItemStack(this); ItemStack stack = new ItemStack(this);
BlockEntity blockEntity = builder.getOptionalParameter(LootContextParams.BLOCK_ENTITY); BlockEntity blockEntity = builder.getOptionalParameter(LootContextParams.BLOCK_ENTITY);
if (blockEntity instanceof SuitcaseBlockEntity suitcase) { if (blockEntity instanceof SuitcaseBlockEntity suitcase) {
CompoundTag beNbt = new CompoundTag(); CompoundTag beNbt = new CompoundTag();
suitcase.saveAdditional(beNbt); suitcase.saveAdditional(beNbt);
if (beNbt != null && !beNbt.isEmpty()) { if (!beNbt.isEmpty()) {
BlockItem.setBlockEntityData(stack, ModBlockEntities.SUITCASE_BLOCK_ENTITY.get(), beNbt); BlockItem.setBlockEntityData(stack, ModBlockEntities.SUITCASE_BLOCK_ENTITY.get(), beNbt);
} }
@ -358,9 +356,9 @@ public class SuitcaseBlock extends BaseEntityBlock {
} }
@Override @Override
public boolean triggerEvent(BlockState state, Level world, BlockPos pos, int type, int data) { public boolean triggerEvent(@NotNull BlockState state, @NotNull Level world, @NotNull BlockPos pos, int type, int data) {
super.triggerEvent(state, world, pos, type, data); super.triggerEvent(state, world, pos, type, data);
BlockEntity blockentity = world.getBlockEntity(pos); BlockEntity blockentity = world.getBlockEntity(pos);
return blockentity != null ? blockentity.triggerEvent(type, data) : false; return blockentity != null && blockentity.triggerEvent(type, data);
} }
} }

View File

@ -11,6 +11,7 @@ import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.*; import java.util.*;
@ -21,23 +22,17 @@ public class SuitcaseBlockEntity extends BlockEntity {
private boolean dimensionLocked = true; private boolean dimensionLocked = true;
private final List<EnteredPlayerData> enteredPlayers = new ArrayList<>(); private final List<EnteredPlayerData> enteredPlayers = new ArrayList<>();
public static class EnteredPlayerData { public record EnteredPlayerData(String uuid, double x, double y, double z, float pitch, float yaw,
public final String uuid; BlockPos suitcasePos) {
public final double x, y, z;
public final float pitch, yaw;
public final BlockPos suitcasePos;
public EnteredPlayerData(String uuid, double x, double y, double z, float pitch, float yaw, BlockPos suitcasePos) {
this.uuid = uuid; this.x = x; this.y = y; this.z = z;
this.pitch = pitch; this.yaw = yaw;
this.suitcasePos = suitcasePos;
}
public CompoundTag toNbt() { public CompoundTag toNbt() {
CompoundTag nbt = new CompoundTag(); CompoundTag nbt = new CompoundTag();
nbt.putString("UUID", uuid); nbt.putString("UUID", uuid);
nbt.putDouble("X", x); nbt.putDouble("Y", y); nbt.putDouble("Z", z); nbt.putDouble("X", x);
nbt.putFloat("Pitch", pitch); nbt.putFloat("Yaw", yaw); nbt.putDouble("Y", y);
nbt.putDouble("Z", z);
nbt.putFloat("Pitch", pitch);
nbt.putFloat("Yaw", yaw);
if (suitcasePos != null) { if (suitcasePos != null) {
nbt.putInt("SuitcaseX", suitcasePos.getX()); nbt.putInt("SuitcaseX", suitcasePos.getX());
nbt.putInt("SuitcaseY", suitcasePos.getY()); nbt.putInt("SuitcaseY", suitcasePos.getY());
@ -131,7 +126,7 @@ public class SuitcaseBlockEntity extends BlockEntity {
} }
@Override @Override
public void saveAdditional(CompoundTag nbt) { public void saveAdditional(@NotNull CompoundTag nbt) {
super.saveAdditional(nbt); super.saveAdditional(nbt);
if (boundKeystoneName != null) { if (boundKeystoneName != null) {
nbt.putString("BoundKeystone", boundKeystoneName); nbt.putString("BoundKeystone", boundKeystoneName);
@ -149,7 +144,7 @@ public class SuitcaseBlockEntity extends BlockEntity {
} }
@Override @Override
public void load(CompoundTag nbt) { public void load(@NotNull CompoundTag nbt) {
super.load(nbt); super.load(nbt);
if (nbt.contains("BoundKeystone", Tag.TAG_STRING)) { if (nbt.contains("BoundKeystone", Tag.TAG_STRING)) {
boundKeystoneName = nbt.getString("BoundKeystone"); boundKeystoneName = nbt.getString("BoundKeystone");
@ -174,7 +169,7 @@ public class SuitcaseBlockEntity extends BlockEntity {
} }
@Override @Override
public CompoundTag getUpdateTag() { public @NotNull CompoundTag getUpdateTag() {
CompoundTag nbt = new CompoundTag(); CompoundTag nbt = new CompoundTag();
this.saveAdditional(nbt); this.saveAdditional(nbt);
return nbt; return nbt;

View File

@ -18,6 +18,7 @@ import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.storage.LevelResource; import net.minecraft.world.level.storage.LevelResource;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import net.minecraft.world.item.ItemStack.TooltipPart; import net.minecraft.world.item.ItemStack.TooltipPart;
@ -36,7 +37,7 @@ public class KeystoneItem extends Item {
} }
@Override @Override
public InteractionResultHolder<ItemStack> use(Level world, Player player, InteractionHand hand) { public @NotNull InteractionResultHolder<ItemStack> use(@NotNull Level world, Player player, @NotNull InteractionHand hand) {
ItemStack stack = player.getItemInHand(hand); ItemStack stack = player.getItemInHand(hand);
String keystoneName = stack.hasCustomHoverName() ? stack.getHoverName().getString().toLowerCase() : ""; String keystoneName = stack.hasCustomHoverName() ? stack.getHoverName().getString().toLowerCase() : "";
String defaultName = "item.travelerssuitcase.keystone"; String defaultName = "item.travelerssuitcase.keystone";
@ -70,7 +71,7 @@ public class KeystoneItem extends Item {
} }
@Override @Override
public void appendHoverText(ItemStack stack, @Nullable Level world, List<Component> tooltip, TooltipFlag flag) { public void appendHoverText(ItemStack stack, @Nullable Level world, @NotNull List<Component> tooltip, @NotNull TooltipFlag flag) {
String keystoneName = stack.hasCustomHoverName() ? stack.getHoverName().getString().toLowerCase() : ""; String keystoneName = stack.hasCustomHoverName() ? stack.getHoverName().getString().toLowerCase() : "";
String defaultNameKey = "item.travelerssuitcase.keystone"; String defaultNameKey = "item.travelerssuitcase.keystone";
if (!stack.hasCustomHoverName() || keystoneName.isEmpty() || if (!stack.hasCustomHoverName() || keystoneName.isEmpty() ||
@ -80,7 +81,7 @@ public class KeystoneItem extends Item {
} }
@Override @Override
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) { public void inventoryTick(ItemStack stack, @NotNull Level world, @NotNull Entity entity, int slot, boolean selected) {
String keystoneName = stack.hasCustomHoverName() ? stack.getHoverName().getString().toLowerCase() : ""; String keystoneName = stack.hasCustomHoverName() ? stack.getHoverName().getString().toLowerCase() : "";
String defaultNameKey = "item.travelerssuitcase.keystone"; String defaultNameKey = "item.travelerssuitcase.keystone";
if (!stack.hasCustomHoverName() || keystoneName.isEmpty() || if (!stack.hasCustomHoverName() || keystoneName.isEmpty() ||
@ -120,9 +121,11 @@ public class KeystoneItem extends Item {
.resolve("dimension_registry"); .resolve("dimension_registry");
Files.createDirectories(dimensionRegistryPath); Files.createDirectories(dimensionRegistryPath);
Path dimensionRegistryFile = dimensionRegistryPath.resolve("registry.txt"); Path dimensionRegistryFile = dimensionRegistryPath.resolve("registry.txt");
Set<String> registeredDimensionsInFile = new HashSet<>(); Set<String> registeredDimensionsInFile;
if (Files.exists(dimensionRegistryFile)) { if (Files.exists(dimensionRegistryFile)) {
registeredDimensionsInFile = new HashSet<>(Files.readAllLines(dimensionRegistryFile)); registeredDimensionsInFile = new HashSet<>(Files.readAllLines(dimensionRegistryFile));
} else {
registeredDimensionsInFile = new HashSet<>();
} }
boolean isDimensionInRegistryFile = registeredDimensionsInFile.contains(dimensionName); boolean isDimensionInRegistryFile = registeredDimensionsInFile.contains(dimensionName);
@ -162,12 +165,12 @@ public class KeystoneItem extends Item {
} }
return false; return false;
} catch (IOException e) { } catch (IOException e) {
TravelersSuitcase.LOGGER.error("Failed to create dimension: " + dimensionName, e); TravelersSuitcase.LOGGER.error("Failed to create dimension: {}", dimensionName, e);
return false; return false;
} }
} }
private void createPackMcmeta(Path datapackPath) throws IOException { private void createPackMcmeta(@NotNull Path datapackPath) throws IOException {
Path packMcmeta = datapackPath.resolve("pack.mcmeta"); Path packMcmeta = datapackPath.resolve("pack.mcmeta");
if (!Files.exists(packMcmeta)) { if (!Files.exists(packMcmeta)) {
String content = """ String content = """

View File

@ -6,7 +6,7 @@ license="MIT"
modId="travelerssuitcase" modId="travelerssuitcase"
version="${mod_version}" version="${mod_version}"
displayName="Traveler's Suitcase" displayName="Traveler's Suitcase"
authors="BennyBoops, Candle" authors="BennyBoops, candle"
description=''' description='''
A mod that adds magical suitcases that can store player positions and create pocket dimensions. A mod that adds magical suitcases that can store player positions and create pocket dimensions.
''' '''

View File

@ -20,5 +20,5 @@
"block.travelerssuitcase.portal": "Portal Block", "block.travelerssuitcase.portal": "Portal Block",
"itemgroup.pocket": "Pocket Repose" "itemgroup.travelerssuitcase": "Traveler's Suitcase"
} }