diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java index 705ef4dd4..304156691 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java @@ -353,10 +353,13 @@ public final class BukkitBlockManager extends AbstractBlockManager { private void initMirrorRegistry() { int size = RegistryUtils.currentBlockRegistrySize(); BlockStateWrapper[] states = new BlockStateWrapper[size]; - for (int i = 0; i < size; i++) { - states[i] = new BukkitBlockStateWrapper(BlockStateUtils.idToBlockState(i), i); + for (int i = 0; i < this.vanillaBlockStateCount; i++) { + states[i] = new BukkitVanillaBlockStateWrapper(BlockStateUtils.idToBlockState(i), i); } - BlockRegistryMirror.init(states, new BukkitBlockStateWrapper(MBlocks.STONE$defaultState, BlockStateUtils.blockStateToId(MBlocks.STONE$defaultState))); + for (int i = this.vanillaBlockStateCount; i < size; i++) { + states[i] = new BukkitCustomBlockStateWrapper(BlockStateUtils.idToBlockState(i), i); + } + BlockRegistryMirror.init(states, states[BlockStateUtils.blockStateToId(MBlocks.STONE$defaultState)]); } // 注册服务端侧的真实方块 diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockStateWrapper.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockStateWrapper.java deleted file mode 100644 index 8d0190d76..000000000 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockStateWrapper.java +++ /dev/null @@ -1,34 +0,0 @@ -package net.momirealms.craftengine.bukkit.block; - -import net.momirealms.craftengine.core.block.BlockStateWrapper; -import net.momirealms.craftengine.core.util.Key; - -public class BukkitBlockStateWrapper implements BlockStateWrapper { - private final Object blockState; - private final int registryId; - - public BukkitBlockStateWrapper(Object blockState, int registryId) { - this.blockState = blockState; - this.registryId = registryId; - } - - @Override - public Object literalObject() { - return this.blockState; - } - - @Override - public int registryId() { - return this.registryId; - } - - @Override - public String toString() { - return this.blockState.toString(); - } - - @Override - public Key ownerId() { - return null; - } -} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitCustomBlockStateWrapper.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitCustomBlockStateWrapper.java new file mode 100644 index 000000000..f67d21749 --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitCustomBlockStateWrapper.java @@ -0,0 +1,46 @@ +package net.momirealms.craftengine.bukkit.block; + +import net.momirealms.craftengine.bukkit.util.BlockStateUtils; +import net.momirealms.craftengine.core.block.AbstractBlockStateWrapper; +import net.momirealms.craftengine.core.block.ImmutableBlockState; +import net.momirealms.craftengine.core.block.properties.Property; +import net.momirealms.craftengine.core.util.Key; + +import java.util.Optional; + +public class BukkitCustomBlockStateWrapper extends AbstractBlockStateWrapper { + + public BukkitCustomBlockStateWrapper(Object blockState, int registryId) { + super(blockState, registryId); + } + + @Override + public Key ownerId() { + return getImmutableBlockState().map(state -> state.owner().key().location()).orElseGet(() -> BlockStateUtils.getBlockOwnerIdFromState(super.blockState)); + } + + @SuppressWarnings("unchecked") + @Override + public T getProperty(String propertyName) { + return (T) getImmutableBlockState().map(state -> { + Property property = state.owner().value().getProperty(propertyName); + if (property == null) + return null; + return state.getNullable(property); + }).orElse(null); + } + + @Override + public boolean hasProperty(String propertyName) { + return getImmutableBlockState().map(state -> state.owner().value().getProperty(propertyName) != null).orElse(false); + } + + @Override + public String getAsString() { + return getImmutableBlockState().map(ImmutableBlockState::toString).orElseGet(() -> BlockStateUtils.fromBlockData(super.blockState).getAsString()); + } + + public Optional getImmutableBlockState() { + return BlockStateUtils.getOptionalCustomBlockState(super.blockState); + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitVanillaBlockStateWrapper.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitVanillaBlockStateWrapper.java new file mode 100644 index 000000000..9a13a5d13 --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitVanillaBlockStateWrapper.java @@ -0,0 +1,36 @@ +package net.momirealms.craftengine.bukkit.block; + +import net.momirealms.craftengine.bukkit.nms.FastNMS; +import net.momirealms.craftengine.bukkit.util.BlockStateUtils; +import net.momirealms.craftengine.core.block.AbstractBlockStateWrapper; +import net.momirealms.craftengine.core.block.StatePropertyAccessor; +import net.momirealms.craftengine.core.util.Key; + +public class BukkitVanillaBlockStateWrapper extends AbstractBlockStateWrapper { + private final StatePropertyAccessor accessor; + + public BukkitVanillaBlockStateWrapper(Object blockState, int registryId) { + super(blockState, registryId); + this.accessor = FastNMS.INSTANCE.createStatePropertyAccessor(blockState); + } + + @Override + public Key ownerId() { + return BlockStateUtils.getBlockOwnerIdFromState(super.blockState); + } + + @Override + public T getProperty(String propertyName) { + return this.accessor.getPropertyValue(propertyName); + } + + @Override + public boolean hasProperty(String propertyName) { + return this.accessor.hasProperty(propertyName); + } + + @Override + public String getAsString() { + return BlockStateUtils.fromBlockData(super.blockState).getAsString(); + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/DoorBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/DoorBlockBehavior.java index 864563451..677e9dd1c 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/DoorBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/DoorBlockBehavior.java @@ -16,8 +16,8 @@ import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.block.UpdateOption; import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; import net.momirealms.craftengine.core.block.properties.Property; -import net.momirealms.craftengine.core.block.state.properties.DoorHinge; -import net.momirealms.craftengine.core.block.state.properties.DoubleBlockHalf; +import net.momirealms.craftengine.core.block.properties.type.DoorHinge; +import net.momirealms.craftengine.core.block.properties.type.DoubleBlockHalf; import net.momirealms.craftengine.core.entity.player.InteractionHand; import net.momirealms.craftengine.core.entity.player.InteractionResult; import net.momirealms.craftengine.core.entity.player.Player; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/DoubleHighBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/DoubleHighBlockBehavior.java index 723af40e4..a60b2597f 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/DoubleHighBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/DoubleHighBlockBehavior.java @@ -9,7 +9,7 @@ import net.momirealms.craftengine.bukkit.util.LocationUtils; import net.momirealms.craftengine.core.block.*; import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; import net.momirealms.craftengine.core.block.properties.Property; -import net.momirealms.craftengine.core.block.state.properties.DoubleBlockHalf; +import net.momirealms.craftengine.core.block.properties.type.DoubleBlockHalf; import net.momirealms.craftengine.core.item.context.BlockPlaceContext; import net.momirealms.craftengine.core.util.Direction; import net.momirealms.craftengine.core.util.ResourceConfigUtils; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FaceAttachedHorizontalDirectionalBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FaceAttachedHorizontalDirectionalBlockBehavior.java index 597470895..dae5a50b3 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FaceAttachedHorizontalDirectionalBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FaceAttachedHorizontalDirectionalBlockBehavior.java @@ -11,7 +11,7 @@ import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; import net.momirealms.craftengine.core.block.properties.Property; -import net.momirealms.craftengine.core.block.state.properties.AnchorType; +import net.momirealms.craftengine.core.block.properties.type.AnchorType; import net.momirealms.craftengine.core.item.context.BlockPlaceContext; import net.momirealms.craftengine.core.util.Direction; import net.momirealms.craftengine.core.util.HorizontalDirection; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/SlabBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/SlabBlockBehavior.java index 3eaf4efcd..f44f55c3a 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/SlabBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/SlabBlockBehavior.java @@ -10,7 +10,7 @@ import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; import net.momirealms.craftengine.core.block.properties.Property; -import net.momirealms.craftengine.core.block.state.properties.SlabType; +import net.momirealms.craftengine.core.block.properties.type.SlabType; import net.momirealms.craftengine.core.item.CustomItem; import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.item.behavior.BlockBoundItemBehavior; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/SofaBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/SofaBlockBehavior.java index 7d7498c36..4259fd8e4 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/SofaBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/SofaBlockBehavior.java @@ -10,7 +10,7 @@ import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; import net.momirealms.craftengine.core.block.properties.Property; -import net.momirealms.craftengine.core.block.state.properties.SofaShape; +import net.momirealms.craftengine.core.block.properties.type.SofaShape; import net.momirealms.craftengine.core.item.context.BlockPlaceContext; import net.momirealms.craftengine.core.util.Direction; import net.momirealms.craftengine.core.util.HorizontalDirection; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java index 2ad532eed..1fa475582 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/StairsBlockBehavior.java @@ -10,8 +10,8 @@ import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; import net.momirealms.craftengine.core.block.properties.Property; -import net.momirealms.craftengine.core.block.state.properties.SingleBlockHalf; -import net.momirealms.craftengine.core.block.state.properties.StairsShape; +import net.momirealms.craftengine.core.block.properties.type.SingleBlockHalf; +import net.momirealms.craftengine.core.block.properties.type.StairsShape; import net.momirealms.craftengine.core.item.context.BlockPlaceContext; import net.momirealms.craftengine.core.util.Direction; import net.momirealms.craftengine.core.util.HorizontalDirection; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/TrapDoorBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/TrapDoorBlockBehavior.java index 71db218b5..e945d546c 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/TrapDoorBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/TrapDoorBlockBehavior.java @@ -15,7 +15,7 @@ import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.block.UpdateOption; import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; import net.momirealms.craftengine.core.block.properties.Property; -import net.momirealms.craftengine.core.block.state.properties.SingleBlockHalf; +import net.momirealms.craftengine.core.block.properties.type.SingleBlockHalf; import net.momirealms.craftengine.core.entity.player.InteractionResult; import net.momirealms.craftengine.core.entity.player.Player; import net.momirealms.craftengine.core.item.Item; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/StairsShapeUtils.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/StairsShapeUtils.java index dde8b33f7..bd6175bcd 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/StairsShapeUtils.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/StairsShapeUtils.java @@ -1,7 +1,7 @@ package net.momirealms.craftengine.bukkit.util; import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections; -import net.momirealms.craftengine.core.block.state.properties.StairsShape; +import net.momirealms.craftengine.core.block.properties.type.StairsShape; public final class StairsShapeUtils { private StairsShapeUtils() {} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitExistingBlock.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitExistingBlock.java index 0c8d61650..22402fadc 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitExistingBlock.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitExistingBlock.java @@ -7,11 +7,7 @@ import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MBlocks; import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MFluids; import net.momirealms.craftengine.bukkit.util.BlockStateUtils; import net.momirealms.craftengine.bukkit.util.LocationUtils; -import net.momirealms.craftengine.core.block.BlockRegistryMirror; -import net.momirealms.craftengine.core.block.BlockStateWrapper; -import net.momirealms.craftengine.core.block.CustomBlock; -import net.momirealms.craftengine.core.block.ImmutableBlockState; -import net.momirealms.craftengine.core.block.state.StatePropertyAccessor; +import net.momirealms.craftengine.core.block.*; import net.momirealms.craftengine.core.item.context.BlockPlaceContext; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.world.ExistingBlock; diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/AbstractBlockManager.java b/core/src/main/java/net/momirealms/craftengine/core/block/AbstractBlockManager.java index c9bda8d59..ef7d9d282 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/block/AbstractBlockManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/block/AbstractBlockManager.java @@ -18,7 +18,9 @@ import net.momirealms.craftengine.core.pack.LoadingSequence; import net.momirealms.craftengine.core.pack.Pack; import net.momirealms.craftengine.core.pack.PendingConfigSection; import net.momirealms.craftengine.core.pack.ResourceLocation; -import net.momirealms.craftengine.core.pack.cache.IdAllocator; +import net.momirealms.craftengine.core.pack.allocator.BlockStateAllocator; +import net.momirealms.craftengine.core.pack.allocator.IdAllocator; +import net.momirealms.craftengine.core.pack.allocator.BlockStateCandidate; import net.momirealms.craftengine.core.pack.model.generation.AbstractModelGenerator; import net.momirealms.craftengine.core.pack.model.generation.ModelGeneration; import net.momirealms.craftengine.core.plugin.CraftEngine; @@ -68,8 +70,6 @@ public abstract class AbstractBlockManager extends AbstractModelGenerator implem protected final Map> appearanceToRealState = new Int2ObjectOpenHashMap<>(); // 用于note_block:0这样格式的自动分配 protected final Map> blockStateArranger = new HashMap<>(); - // 根据registry id找note_block:x中的x值 - protected final Map reversedBlockStateArranger = new HashMap<>(); // 全方块状态映射文件,用于网络包映射 protected final int[] blockStateMappings; // 原版方块状态数量 @@ -82,6 +82,8 @@ public abstract class AbstractBlockManager extends AbstractModelGenerator implem protected final ImmutableBlockState[] immutableBlockStates; // 原版方块的属性缓存 protected final BlockSettings[] vanillaBlockSettings; + // 倒推缓存 + protected final BlockStateCandidate[] reversedBlockStateArranger; // 临时存储哪些视觉方块被使用了 protected final Set tempVisualBlockStatesInUse = new HashSet<>(); protected final Set tempVisualBlocksInUse = new HashSet<>(); @@ -99,6 +101,7 @@ public abstract class AbstractBlockManager extends AbstractModelGenerator implem this.vanillaBlockSettings = new BlockSettings[vanillaBlockStateCount]; this.immutableBlockStates = new ImmutableBlockState[customBlockCount]; this.blockStateMappings = new int[customBlockCount + vanillaBlockStateCount]; + this.reversedBlockStateArranger = new BlockStateCandidate[vanillaBlockStateCount]; Arrays.fill(this.blockStateMappings, -1); } @@ -127,10 +130,10 @@ public abstract class AbstractBlockManager extends AbstractModelGenerator implem this.modBlockStateOverrides.clear(); this.byId.clear(); this.blockStateArranger.clear(); - this.reversedBlockStateArranger.clear(); this.appearanceToRealState.clear(); Arrays.fill(this.blockStateMappings, -1); Arrays.fill(this.immutableBlockStates, EmptyBlock.STATE); + Arrays.fill(this.reversedBlockStateArranger, null); } @Override @@ -272,9 +275,11 @@ public abstract class AbstractBlockManager extends AbstractModelGenerator implem continue; } AbstractBlockManager.this.blockStateMappings[beforeState.registryId()] = afterState.registryId(); - List blockStateWrappers = AbstractBlockManager.this.blockStateArranger.computeIfAbsent(getBlockOwnerId(beforeState), k -> new ArrayList<>()); + Key blockOwnerId = getBlockOwnerId(beforeState); + List blockStateWrappers = AbstractBlockManager.this.blockStateArranger.computeIfAbsent(blockOwnerId, k -> new ArrayList<>()); blockStateWrappers.add(beforeState); - AbstractBlockManager.this.reversedBlockStateArranger.put(beforeState.registryId(), blockStateWrappers.size() - 1); + AbstractBlockManager.this.reversedBlockStateArranger[beforeState.registryId()] = blockParser.createVisualBlockCandidate(beforeState); + } exceptionCollector.throwIfPresent(); } @@ -283,8 +288,8 @@ public abstract class AbstractBlockManager extends AbstractModelGenerator implem public class BlockParser implements IdSectionConfigParser { public static final String[] CONFIG_SECTION_NAME = new String[]{"blocks", "block"}; private final IdAllocator internalIdAllocator; - private final Map appearanceIdAllocators = new HashMap<>(); private final List pendingConfigSections = new ArrayList<>(); + private final BlockStateAllocator[] visualBlockStateAllocators = new BlockStateAllocator[AutoStateGroup.values().length]; public BlockParser() { this.internalIdAllocator = new IdAllocator(AbstractBlockManager.this.plugin.dataFolderPath().resolve("cache").resolve("custom-block-states.json")); @@ -294,6 +299,29 @@ public abstract class AbstractBlockManager extends AbstractModelGenerator implem this.pendingConfigSections.add(section); } + @Nullable + public BlockStateCandidate createVisualBlockCandidate(BlockStateWrapper blockState) { + List groups = AutoStateGroup.findGroups(blockState); + if (!groups.isEmpty()) { + BlockStateCandidate candidate = new BlockStateCandidate(blockState); + for (AutoStateGroup group : groups) { + getOrCreateBlockStateAllocator(group).addCandidate(candidate); + } + return candidate; + } + return null; + } + + private BlockStateAllocator getOrCreateBlockStateAllocator(AutoStateGroup group) { + int index = group.ordinal(); + BlockStateAllocator visualBlockStateAllocator = this.visualBlockStateAllocators[index]; + if (visualBlockStateAllocator == null) { + visualBlockStateAllocator = new BlockStateAllocator(); + this.visualBlockStateAllocators[index] = visualBlockStateAllocator; + } + return visualBlockStateAllocator; + } + @Override public void postProcess() { this.internalIdAllocator.processPendingAllocations(); @@ -323,23 +351,6 @@ public abstract class AbstractBlockManager extends AbstractModelGenerator implem this.pendingConfigSections.clear(); } - @Nullable - public IdAllocator getOrCreateAppearanceIdAllocator(Key type) { - if (!AbstractBlockManager.this.blockStateArranger.containsKey(type)) { - return null; - } - return this.appearanceIdAllocators.computeIfAbsent(type, k -> { - IdAllocator newAllocator = new IdAllocator(plugin.dataFolderPath().resolve("cache").resolve("visual-block-states").resolve(k.value() + ".json")); - newAllocator.reset(0, AbstractBlockManager.this.blockStateArranger.get(type).size()); - try { - newAllocator.loadFromCache(); - } catch (IOException e) { - AbstractBlockManager.this.plugin.logger().warn("Error while loading visual block states cache for block " + k.asString(), e); - } - return newAllocator; - }); - } - @Override public String[] sectionId() { return CONFIG_SECTION_NAME; diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/AbstractBlockStateWrapper.java b/core/src/main/java/net/momirealms/craftengine/core/block/AbstractBlockStateWrapper.java new file mode 100644 index 000000000..fd3f67fbe --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/block/AbstractBlockStateWrapper.java @@ -0,0 +1,21 @@ +package net.momirealms.craftengine.core.block; + +public abstract class AbstractBlockStateWrapper implements BlockStateWrapper { + protected final Object blockState; + protected final int registryId; + + protected AbstractBlockStateWrapper(Object blockState, int registryId) { + this.blockState = blockState; + this.registryId = registryId; + } + + @Override + public Object literalObject() { + return this.blockState; + } + + @Override + public int registryId() { + return this.registryId; + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/AutoStateGroup.java b/core/src/main/java/net/momirealms/craftengine/core/block/AutoStateGroup.java new file mode 100644 index 000000000..b79a46f55 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/block/AutoStateGroup.java @@ -0,0 +1,84 @@ +package net.momirealms.craftengine.core.block; + +import net.momirealms.craftengine.core.util.Key; +import org.jetbrains.annotations.Nullable; + +import java.util.*; +import java.util.function.Predicate; + +public enum AutoStateGroup { + LEAVES("leaves", + Set.of(BlockKeys.OAK_LEAVES, BlockKeys.SPRUCE_LEAVES, BlockKeys.BIRCH_LEAVES, BlockKeys.JUNGLE_LEAVES, BlockKeys.ACACIA_LEAVES, BlockKeys.DARK_OAK_LEAVES, BlockKeys.MANGROVE_LEAVES, BlockKeys.CHERRY_LEAVES, BlockKeys.PALE_OAK_LEAVES, BlockKeys.AZALEA_LEAVES, BlockKeys.FLOWERING_AZALEA_LEAVES), + (w) -> !(boolean) w.getProperty("waterlogged"), 0 + ), + WATERLOGGED_LEAVES( + "waterlogged_leaves", + Set.of(BlockKeys.OAK_LEAVES, BlockKeys.SPRUCE_LEAVES, BlockKeys.BIRCH_LEAVES, BlockKeys.JUNGLE_LEAVES, BlockKeys.ACACIA_LEAVES, BlockKeys.DARK_OAK_LEAVES, BlockKeys.MANGROVE_LEAVES, BlockKeys.CHERRY_LEAVES, BlockKeys.PALE_OAK_LEAVES, BlockKeys.AZALEA_LEAVES, BlockKeys.FLOWERING_AZALEA_LEAVES), + (w) -> w.getProperty("waterlogged"), 0 + ), + TRIPWIRE("tripwire", Set.of(BlockKeys.TRIPWIRE), (w) -> true, 1), + LOWER_TRIPWIRE("lower_tripwire", Set.of(BlockKeys.TRIPWIRE), (w) -> w.getProperty("attached"), 0), + HIGHER_TRIPWIRE("higher_tripwire", Set.of(BlockKeys.TRIPWIRE), (w) -> !(boolean) w.getProperty("attached"), 0), + NOTE_BLOCK("note_block", Set.of(BlockKeys.NOTE_BLOCK), (w) -> true, 0), + BROWN_MUSHROOM("brown_mushroom", Set.of(BlockKeys.BROWN_MUSHROOM_BLOCK), (w) -> true, 0), + RED_MUSHROOM("red_mushroom", Set.of(BlockKeys.RED_MUSHROOM_BLOCK), (w) -> true, 0), + MUSHROOM_STEM("mushroom_stem", Set.of(BlockKeys.MUSHROOM_STEM), (w) -> true, 0), + MUSHROOM("mushroom", Set.of(BlockKeys.BROWN_MUSHROOM_BLOCK, BlockKeys.RED_MUSHROOM_BLOCK, BlockKeys.MUSHROOM_STEM), (w) -> true, 1), + SOLID("solid", Set.of(BlockKeys.BROWN_MUSHROOM_BLOCK, BlockKeys.RED_MUSHROOM_BLOCK, BlockKeys.MUSHROOM_STEM, BlockKeys.NOTE_BLOCK), (w) -> true, 2); + + private final Set blocks; + private final String id; + private final Predicate predicate; + private final int priority; + + AutoStateGroup(String id, Set blocks, Predicate predicate, int priority) { + this.id = id; + this.blocks = blocks; + this.predicate = predicate; + this.priority = priority; + } + + public int priority() { + return priority; + } + + public Set blocks() { + return blocks; + } + + public String id() { + return id; + } + + private static final Map BY_ID = new HashMap<>(); + private static final Map> BY_BLOCKS = new HashMap<>(); + + static { + for (AutoStateGroup group : AutoStateGroup.values()) { + BY_ID.put(group.id(), group); + BY_ID.put(group.id().toUpperCase(Locale.ROOT), group); + for (Key key : group.blocks) { + BY_BLOCKS.computeIfAbsent(key, k -> new ArrayList<>(4)).add(group); + } + } + } + + @Nullable + public static AutoStateGroup byId(String id) { + return BY_ID.get(id); + } + + public static List findGroups(BlockStateWrapper wrapper) { + return findGroups(wrapper.ownerId(), wrapper); + } + + public static List findGroups(Key id, BlockStateWrapper wrapper) { + List groups = BY_BLOCKS.get(id); + if (groups == null) return Collections.emptyList(); + List result = new ArrayList<>(groups.size()); + for (AutoStateGroup group : groups) { + if (group.predicate.test(wrapper)) result.add(group); + } + return result; + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/BlockKeys.java b/core/src/main/java/net/momirealms/craftengine/core/block/BlockKeys.java index ce9cf8079..30490bbad 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/block/BlockKeys.java +++ b/core/src/main/java/net/momirealms/craftengine/core/block/BlockKeys.java @@ -246,6 +246,22 @@ public final class BlockKeys { public static final Key CACTUS = Key.of("minecraft:cactus"); + public static final Key BROWN_MUSHROOM_BLOCK = Key.of("minecraft:brown_mushroom_block"); + public static final Key RED_MUSHROOM_BLOCK = Key.of("minecraft:red_mushroom_block"); + public static final Key MUSHROOM_STEM = Key.of("minecraft:mushroom_stem"); + + public static final Key OAK_LEAVES = Key.of("minecraft:oak_leaves"); + public static final Key SPRUCE_LEAVES = Key.of("minecraft:spruce_leaves"); + public static final Key BIRCH_LEAVES = Key.of("minecraft:birch_leaves"); + public static final Key JUNGLE_LEAVES = Key.of("minecraft:jungle_leaves"); + public static final Key ACACIA_LEAVES = Key.of("minecraft:acacia_leaves"); + public static final Key DARK_OAK_LEAVES = Key.of("minecraft:dark_oak_leaves"); + public static final Key MANGROVE_LEAVES = Key.of("minecraft:mangrove_leaves"); + public static final Key CHERRY_LEAVES = Key.of("minecraft:cherry_leaves"); + public static final Key PALE_OAK_LEAVES = Key.of("minecraft:pale_oak_leaves"); + public static final Key AZALEA_LEAVES = Key.of("minecraft:azalea_leaves"); + public static final Key FLOWERING_AZALEA_LEAVES = Key.of("minecraft:flowering_azalea_leaves"); + public static final List WOODEN_TRAPDOORS = List.of(OAK_TRAPDOOR, SPRUCE_TRAPDOOR, BIRCH_TRAPDOOR, ACACIA_TRAPDOOR, PALE_OAK_TRAPDOOR, DARK_OAK_TRAPDOOR, MANGROVE_TRAPDOOR, JUNGLE_TRAPDOOR); public static final List CHERRY_TRAPDOORS = List.of(CHERRY_TRAPDOOR); diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/BlockStateHolder.java b/core/src/main/java/net/momirealms/craftengine/core/block/BlockStateHolder.java index eaa50da56..83c34a1f4 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/block/BlockStateHolder.java +++ b/core/src/main/java/net/momirealms/craftengine/core/block/BlockStateHolder.java @@ -18,7 +18,7 @@ public class BlockStateHolder { this.propertyMap = new Reference2ObjectArrayMap<>(propertyMap); } - public Holder owner() { + public Holder.Reference owner() { return this.owner; } diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/BlockStateWrapper.java b/core/src/main/java/net/momirealms/craftengine/core/block/BlockStateWrapper.java index 846900088..0b19c2ee3 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/block/BlockStateWrapper.java +++ b/core/src/main/java/net/momirealms/craftengine/core/block/BlockStateWrapper.java @@ -9,4 +9,10 @@ public interface BlockStateWrapper { int registryId(); Key ownerId(); + + T getProperty(String propertyName); + + boolean hasProperty(String propertyName); + + String getAsString(); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/state/StatePropertyAccessor.java b/core/src/main/java/net/momirealms/craftengine/core/block/StatePropertyAccessor.java similarity index 83% rename from core/src/main/java/net/momirealms/craftengine/core/block/state/StatePropertyAccessor.java rename to core/src/main/java/net/momirealms/craftengine/core/block/StatePropertyAccessor.java index a69d4e24e..3e1a46e3f 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/block/state/StatePropertyAccessor.java +++ b/core/src/main/java/net/momirealms/craftengine/core/block/StatePropertyAccessor.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.block.state; +package net.momirealms.craftengine.core.block; import java.util.Collection; diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/properties/Properties.java b/core/src/main/java/net/momirealms/craftengine/core/block/properties/Properties.java index 42753ec45..641c71a72 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/block/properties/Properties.java +++ b/core/src/main/java/net/momirealms/craftengine/core/block/properties/Properties.java @@ -1,6 +1,6 @@ package net.momirealms.craftengine.core.block.properties; -import net.momirealms.craftengine.core.block.state.properties.*; +import net.momirealms.craftengine.core.block.properties.type.*; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; import net.momirealms.craftengine.core.registry.BuiltInRegistries; import net.momirealms.craftengine.core.registry.Registries; @@ -40,7 +40,6 @@ public final class Properties { register(SLAB_TYPE, new EnumProperty.Factory<>(SlabType.class)); register(SOFA_SHAPE, new EnumProperty.Factory<>(SofaShape.class)); register(ANCHOR_TYPE, new EnumProperty.Factory<>(AnchorType.class)); - } public static void register(Key key, PropertyFactory factory) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/properties/type/AnchorType.java b/core/src/main/java/net/momirealms/craftengine/core/block/properties/type/AnchorType.java new file mode 100644 index 000000000..26e95f0a5 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/block/properties/type/AnchorType.java @@ -0,0 +1,7 @@ +package net.momirealms.craftengine.core.block.properties.type; + +public enum AnchorType { + FLOOR, + WALL, + CEILING +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/properties/type/DoorHinge.java b/core/src/main/java/net/momirealms/craftengine/core/block/properties/type/DoorHinge.java new file mode 100644 index 000000000..16ef73e49 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/block/properties/type/DoorHinge.java @@ -0,0 +1,5 @@ +package net.momirealms.craftengine.core.block.properties.type; + +public enum DoorHinge { + LEFT, RIGHT +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/properties/type/DoubleBlockHalf.java b/core/src/main/java/net/momirealms/craftengine/core/block/properties/type/DoubleBlockHalf.java new file mode 100644 index 000000000..1823e76dd --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/block/properties/type/DoubleBlockHalf.java @@ -0,0 +1,5 @@ +package net.momirealms.craftengine.core.block.properties.type; + +public enum DoubleBlockHalf { + UPPER, LOWER +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/properties/type/SingleBlockHalf.java b/core/src/main/java/net/momirealms/craftengine/core/block/properties/type/SingleBlockHalf.java new file mode 100644 index 000000000..04cee6405 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/block/properties/type/SingleBlockHalf.java @@ -0,0 +1,5 @@ +package net.momirealms.craftengine.core.block.properties.type; + +public enum SingleBlockHalf { + TOP, BOTTOM +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/properties/type/SlabType.java b/core/src/main/java/net/momirealms/craftengine/core/block/properties/type/SlabType.java new file mode 100644 index 000000000..2f1d2e1e5 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/block/properties/type/SlabType.java @@ -0,0 +1,7 @@ +package net.momirealms.craftengine.core.block.properties.type; + +public enum SlabType { + TOP, + BOTTOM, + DOUBLE +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/state/properties/SofaShape.java b/core/src/main/java/net/momirealms/craftengine/core/block/properties/type/SofaShape.java similarity index 53% rename from core/src/main/java/net/momirealms/craftengine/core/block/state/properties/SofaShape.java rename to core/src/main/java/net/momirealms/craftengine/core/block/properties/type/SofaShape.java index a9d717dcb..82ef28632 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/block/state/properties/SofaShape.java +++ b/core/src/main/java/net/momirealms/craftengine/core/block/properties/type/SofaShape.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.block.state.properties; +package net.momirealms.craftengine.core.block.properties.type; public enum SofaShape { STRAIGHT, diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/state/properties/StairsShape.java b/core/src/main/java/net/momirealms/craftengine/core/block/properties/type/StairsShape.java similarity index 62% rename from core/src/main/java/net/momirealms/craftengine/core/block/state/properties/StairsShape.java rename to core/src/main/java/net/momirealms/craftengine/core/block/properties/type/StairsShape.java index b0cac6526..4d8616818 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/block/state/properties/StairsShape.java +++ b/core/src/main/java/net/momirealms/craftengine/core/block/properties/type/StairsShape.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.block.state.properties; +package net.momirealms.craftengine.core.block.properties.type; public enum StairsShape { STRAIGHT, diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/state/properties/AnchorType.java b/core/src/main/java/net/momirealms/craftengine/core/block/state/properties/AnchorType.java deleted file mode 100644 index 65bec0f74..000000000 --- a/core/src/main/java/net/momirealms/craftengine/core/block/state/properties/AnchorType.java +++ /dev/null @@ -1,7 +0,0 @@ -package net.momirealms.craftengine.core.block.state.properties; - -public enum AnchorType { - FLOOR, - WALL, - CEILING -} diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/state/properties/DoorHinge.java b/core/src/main/java/net/momirealms/craftengine/core/block/state/properties/DoorHinge.java deleted file mode 100644 index 811514a63..000000000 --- a/core/src/main/java/net/momirealms/craftengine/core/block/state/properties/DoorHinge.java +++ /dev/null @@ -1,5 +0,0 @@ -package net.momirealms.craftengine.core.block.state.properties; - -public enum DoorHinge { - LEFT, RIGHT -} diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/state/properties/DoubleBlockHalf.java b/core/src/main/java/net/momirealms/craftengine/core/block/state/properties/DoubleBlockHalf.java deleted file mode 100644 index 1891b3de8..000000000 --- a/core/src/main/java/net/momirealms/craftengine/core/block/state/properties/DoubleBlockHalf.java +++ /dev/null @@ -1,5 +0,0 @@ -package net.momirealms.craftengine.core.block.state.properties; - -public enum DoubleBlockHalf { - UPPER, LOWER -} diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/state/properties/SingleBlockHalf.java b/core/src/main/java/net/momirealms/craftengine/core/block/state/properties/SingleBlockHalf.java deleted file mode 100644 index c5b3b83e8..000000000 --- a/core/src/main/java/net/momirealms/craftengine/core/block/state/properties/SingleBlockHalf.java +++ /dev/null @@ -1,5 +0,0 @@ -package net.momirealms.craftengine.core.block.state.properties; - -public enum SingleBlockHalf { - TOP, BOTTOM -} diff --git a/core/src/main/java/net/momirealms/craftengine/core/block/state/properties/SlabType.java b/core/src/main/java/net/momirealms/craftengine/core/block/state/properties/SlabType.java deleted file mode 100644 index 09f4fbbfb..000000000 --- a/core/src/main/java/net/momirealms/craftengine/core/block/state/properties/SlabType.java +++ /dev/null @@ -1,7 +0,0 @@ -package net.momirealms.craftengine.core.block.state.properties; - -public enum SlabType { - TOP, - BOTTOM, - DOUBLE -} diff --git a/core/src/main/java/net/momirealms/craftengine/core/font/AbstractFontManager.java b/core/src/main/java/net/momirealms/craftengine/core/font/AbstractFontManager.java index 3fbeefb07..80ec3ace5 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/font/AbstractFontManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/font/AbstractFontManager.java @@ -5,7 +5,7 @@ import net.momirealms.craftengine.core.entity.player.Player; import net.momirealms.craftengine.core.pack.LoadingSequence; import net.momirealms.craftengine.core.pack.Pack; import net.momirealms.craftengine.core.pack.ResourceLocation; -import net.momirealms.craftengine.core.pack.cache.IdAllocator; +import net.momirealms.craftengine.core.pack.allocator.IdAllocator; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.config.Config; import net.momirealms.craftengine.core.plugin.config.ConfigParser; diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java b/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java index a4c0164c3..e6b46ea9d 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java @@ -14,7 +14,7 @@ import net.momirealms.craftengine.core.pack.AbstractPackManager; import net.momirealms.craftengine.core.pack.LoadingSequence; import net.momirealms.craftengine.core.pack.Pack; import net.momirealms.craftengine.core.pack.ResourceLocation; -import net.momirealms.craftengine.core.pack.cache.IdAllocator; +import net.momirealms.craftengine.core.pack.allocator.IdAllocator; import net.momirealms.craftengine.core.pack.model.*; import net.momirealms.craftengine.core.pack.model.generation.AbstractModelGenerator; import net.momirealms.craftengine.core.pack.model.generation.ModelGeneration; diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/allocator/BlockStateAllocator.java b/core/src/main/java/net/momirealms/craftengine/core/pack/allocator/BlockStateAllocator.java new file mode 100644 index 000000000..5669d0b27 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/allocator/BlockStateAllocator.java @@ -0,0 +1,33 @@ +package net.momirealms.craftengine.core.pack.allocator; + +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; + +public class BlockStateAllocator { + private final List blockStates = new ArrayList<>(); + private int pointer = 0; + private int max = -1; + + public void addCandidate(BlockStateCandidate state) { + this.blockStates.add(state); + this.max = this.blockStates.size() - 1; + } + + @Nullable + public BlockStateCandidate findNext() { + while (this.pointer < this.max) { + final BlockStateCandidate state = this.blockStates.get(this.pointer); + if (!state.isUsed()) { + return state; + } + this.pointer++; + } + return null; + } + + public void processPendingAllocations() { + + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/allocator/BlockStateCandidate.java b/core/src/main/java/net/momirealms/craftengine/core/pack/allocator/BlockStateCandidate.java new file mode 100644 index 000000000..abcfdfbba --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/allocator/BlockStateCandidate.java @@ -0,0 +1,24 @@ +package net.momirealms.craftengine.core.pack.allocator; + +import net.momirealms.craftengine.core.block.BlockStateWrapper; + +public class BlockStateCandidate { + private final BlockStateWrapper blockState; + private boolean used = false; + + public BlockStateCandidate(BlockStateWrapper blockState) { + this.blockState = blockState; + } + + public void setUsed() { + this.used = true; + } + + public boolean isUsed() { + return used; + } + + public BlockStateWrapper blockState() { + return blockState; + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/cache/IdAllocator.java b/core/src/main/java/net/momirealms/craftengine/core/pack/allocator/IdAllocator.java similarity index 99% rename from core/src/main/java/net/momirealms/craftengine/core/pack/cache/IdAllocator.java rename to core/src/main/java/net/momirealms/craftengine/core/pack/allocator/IdAllocator.java index 5977120db..47c5e6bd3 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/cache/IdAllocator.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/allocator/IdAllocator.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.core.pack.cache; +package net.momirealms.craftengine.core.pack.allocator; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/condition/MatchBlockPropertyCondition.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/condition/MatchBlockPropertyCondition.java index e5ce7b198..41db9e150 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/condition/MatchBlockPropertyCondition.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/condition/MatchBlockPropertyCondition.java @@ -2,8 +2,8 @@ package net.momirealms.craftengine.core.plugin.context.condition; import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; +import net.momirealms.craftengine.core.block.StatePropertyAccessor; import net.momirealms.craftengine.core.block.properties.Property; -import net.momirealms.craftengine.core.block.state.StatePropertyAccessor; import net.momirealms.craftengine.core.plugin.context.Condition; import net.momirealms.craftengine.core.plugin.context.Context; import net.momirealms.craftengine.core.plugin.context.parameter.DirectContextParameters; diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/I18NData.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/I18NData.java index a87b62c10..4d8689096 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/I18NData.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/I18NData.java @@ -26,7 +26,7 @@ public class I18NData { if (blockOptional.isPresent()) { List states = blockOptional.get().variantProvider().states(); if (states.size() == 1) { - return List.of("block." + stateToRealBlockId(states.get(0))); + return List.of("block." + stateToRealBlockId(states.getFirst())); } else { ArrayList processed = new ArrayList<>(); for (ImmutableBlockState state : states) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/TranslationManagerImpl.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/TranslationManagerImpl.java index b4e249748..35b1026ef 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/TranslationManagerImpl.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/locale/TranslationManagerImpl.java @@ -2,16 +2,12 @@ package net.momirealms.craftengine.core.plugin.locale; import net.kyori.adventure.key.Key; import net.kyori.adventure.text.Component; -import net.momirealms.craftengine.core.block.AbstractBlockManager; -import net.momirealms.craftengine.core.font.FontManager; -import net.momirealms.craftengine.core.font.OffsetFont; import net.momirealms.craftengine.core.pack.LoadingSequence; import net.momirealms.craftengine.core.pack.Pack; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.Plugin; import net.momirealms.craftengine.core.plugin.PluginProperties; import net.momirealms.craftengine.core.plugin.config.*; -import net.momirealms.craftengine.core.plugin.text.component.ComponentProvider; import net.momirealms.craftengine.core.plugin.text.minimessage.ImageTag; import net.momirealms.craftengine.core.plugin.text.minimessage.IndexedArgumentTag; import net.momirealms.craftengine.core.plugin.text.minimessage.ShiftTag; diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/AdventureHelper.java b/core/src/main/java/net/momirealms/craftengine/core/util/AdventureHelper.java index bc134b433..c17579e65 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/AdventureHelper.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/AdventureHelper.java @@ -1,15 +1,11 @@ package net.momirealms.craftengine.core.util; import com.google.gson.JsonElement; -import net.kyori.adventure.audience.Audience; -import net.kyori.adventure.key.Key; -import net.kyori.adventure.sound.Sound; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.ComponentIteratorType; import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.TextReplacementConfig; import net.kyori.adventure.text.minimessage.MiniMessage; -import net.kyori.adventure.text.minimessage.internal.parser.TokenParser; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.kyori.adventure.text.serializer.json.JSONOptions; diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/CharacterUtils.java b/core/src/main/java/net/momirealms/craftengine/core/util/CharacterUtils.java index 3f069b8ec..08a9155e2 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/CharacterUtils.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/CharacterUtils.java @@ -2,7 +2,6 @@ package net.momirealms.craftengine.core.util; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; -import java.util.regex.Pattern; import java.util.stream.IntStream; public class CharacterUtils { diff --git a/core/src/main/java/net/momirealms/craftengine/core/world/ExistingBlock.java b/core/src/main/java/net/momirealms/craftengine/core/world/ExistingBlock.java index 947bc664d..d6fac39cf 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/world/ExistingBlock.java +++ b/core/src/main/java/net/momirealms/craftengine/core/world/ExistingBlock.java @@ -3,7 +3,7 @@ package net.momirealms.craftengine.core.world; import net.momirealms.craftengine.core.block.BlockStateWrapper; import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; -import net.momirealms.craftengine.core.block.state.StatePropertyAccessor; +import net.momirealms.craftengine.core.block.StatePropertyAccessor; import net.momirealms.craftengine.core.item.context.BlockPlaceContext; import net.momirealms.craftengine.core.util.Key; import org.jetbrains.annotations.NotNull; diff --git a/gradle.properties b/gradle.properties index 604850d98..1de766a2f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -50,7 +50,7 @@ byte_buddy_version=1.17.5 ahocorasick_version=0.6.3 snake_yaml_version=2.5 anti_grief_version=0.20 -nms_helper_version=1.0.97 +nms_helper_version=1.0.98 evalex_version=3.5.0 reactive_streams_version=1.0.4 amazon_awssdk_version=2.34.5