mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-19 15:09:15 +00:00
改进block-state
This commit is contained in:
@@ -3,6 +3,7 @@ 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.BlockStateWrapper;
|
||||
import net.momirealms.craftengine.core.block.CustomBlockStateWrapper;
|
||||
import net.momirealms.craftengine.core.block.ImmutableBlockState;
|
||||
import net.momirealms.craftengine.core.block.properties.Property;
|
||||
import net.momirealms.craftengine.core.util.Key;
|
||||
@@ -11,12 +12,22 @@ import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public class BukkitCustomBlockStateWrapper extends AbstractBlockStateWrapper {
|
||||
public class BukkitCustomBlockStateWrapper extends AbstractBlockStateWrapper implements CustomBlockStateWrapper {
|
||||
|
||||
public BukkitCustomBlockStateWrapper(Object blockState, int registryId) {
|
||||
super(blockState, registryId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockStateWrapper visualBlockState() {
|
||||
return getImmutableBlockState().map(ImmutableBlockState::vanillaBlockState).orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCustom() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Key ownerId() {
|
||||
return getImmutableBlockState().map(state -> state.owner().value().id()).orElseGet(() -> BlockStateUtils.getBlockOwnerIdFromState(super.blockState));
|
||||
|
||||
@@ -18,6 +18,11 @@ public class BukkitVanillaBlockStateWrapper extends AbstractBlockStateWrapper {
|
||||
this.accessor = FastNMS.INSTANCE.createStatePropertyAccessor(blockState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCustom() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Key ownerId() {
|
||||
return BlockStateUtils.getBlockOwnerIdFromState(super.blockState);
|
||||
|
||||
@@ -32,6 +32,7 @@ public class ComponentTypes {
|
||||
public static final Object FIREWORK_EXPLOSION = getComponentType(ComponentKeys.FIREWORK_EXPLOSION);
|
||||
public static final Object BUNDLE_CONTENTS = getComponentType(ComponentKeys.BUNDLE_CONTENTS);
|
||||
public static final Object CONTAINER = getComponentType(ComponentKeys.CONTAINER);
|
||||
public static final Object BLOCK_STATE = getComponentType(ComponentKeys.BLOCK_STATE);
|
||||
|
||||
private ComponentTypes() {}
|
||||
|
||||
|
||||
@@ -612,11 +612,11 @@ public class ComponentItemFactory1_20_5 extends BukkitItemFactory<ComponentItemW
|
||||
|
||||
@Override
|
||||
protected Optional<Map<String, String>> blockState(ComponentItemWrapper item) {
|
||||
return Optional.empty();
|
||||
return item.getJavaComponent(ComponentTypes.BLOCK_STATE);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void blockState(ComponentItemWrapper item, Map<String, String> state) {
|
||||
|
||||
item.setJavaComponent(ComponentTypes.BLOCK_STATE, state);
|
||||
}
|
||||
}
|
||||
@@ -303,6 +303,18 @@ public class UniversalItemFactory extends BukkitItemFactory<LegacyItemWrapper> {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Optional<Map<String, String>> blockState(LegacyItemWrapper item) {
|
||||
Map<String, String> state = item.getJavaTag("BlockStateTag");
|
||||
if (state == null) return Optional.empty();
|
||||
return Optional.of(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void blockState(LegacyItemWrapper item, Map<String, String> state) {
|
||||
item.setTag(state, "BlockStateTag");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Optional<Trim> trim(LegacyItemWrapper item) {
|
||||
String material = item.getJavaTag("Trim", "material");
|
||||
|
||||
@@ -108,6 +108,7 @@ import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
import org.bukkit.persistence.PersistentDataType;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.messaging.PluginMessageListener;
|
||||
import org.bukkit.util.RayTraceResult;
|
||||
import org.bukkit.util.Vector;
|
||||
@@ -156,7 +157,8 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
instance = this;
|
||||
this.s2cGamePacketListeners = new ByteBufferPacketListenerHolder[PlayPacketIdHelper.count(PacketFlow.CLIENTBOUND)];
|
||||
this.c2sGamePacketListeners = new ByteBufferPacketListenerHolder[PlayPacketIdHelper.count(PacketFlow.SERVERBOUND)];
|
||||
this.hasModelEngine = Bukkit.getPluginManager().getPlugin("ModelEngine") != null;
|
||||
Plugin modelEngine = Bukkit.getPluginManager().getPlugin("ModelEngine");
|
||||
this.hasModelEngine = modelEngine != null && modelEngine.getPluginMeta().getVersion().startsWith("R4");
|
||||
this.plugin = plugin;
|
||||
// set up packet id
|
||||
this.packetIds = VersionHelper.isOrAbove1_20_5() ? new PacketIds1_20_5() : new PacketIds1_20();
|
||||
|
||||
@@ -21,8 +21,8 @@ public enum AutoStateGroup {
|
||||
LOWER_TRIPWIRE("lower_tripwire", Set.of(BlockKeys.TRIPWIRE), (w) -> w.getProperty("attached")),
|
||||
HIGHER_TRIPWIRE("higher_tripwire", Set.of(BlockKeys.TRIPWIRE), (w) -> !(boolean) w.getProperty("attached")),
|
||||
NOTE_BLOCK("note_block", Set.of(BlockKeys.NOTE_BLOCK), (w) -> true),
|
||||
BROWN_MUSHROOM("brown_mushroom", Set.of(BlockKeys.BROWN_MUSHROOM_BLOCK), (w) -> true),
|
||||
RED_MUSHROOM("red_mushroom", Set.of(BlockKeys.RED_MUSHROOM_BLOCK), (w) -> true),
|
||||
BROWN_MUSHROOM("brown_mushroom_block", Set.of(BlockKeys.BROWN_MUSHROOM_BLOCK), (w) -> true),
|
||||
RED_MUSHROOM("red_mushroom_block", Set.of(BlockKeys.RED_MUSHROOM_BLOCK), (w) -> true),
|
||||
MUSHROOM_STEM("mushroom_stem", Set.of(BlockKeys.MUSHROOM_STEM), (w) -> true),
|
||||
TRIPWIRE("tripwire", Set.of(BlockKeys.TRIPWIRE), (w) -> true),
|
||||
SUGAR_CANE("sugar_cane", Set.of(BlockKeys.SUGAR_CANE), (w) -> true),
|
||||
|
||||
@@ -25,6 +25,8 @@ public interface BlockStateWrapper extends Comparable<BlockStateWrapper> {
|
||||
|
||||
String getAsString();
|
||||
|
||||
boolean isCustom();
|
||||
|
||||
@Override
|
||||
default int compareTo(@NotNull BlockStateWrapper o) {
|
||||
return Integer.compare(registryId(), o.registryId());
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
package net.momirealms.craftengine.core.block;
|
||||
|
||||
public interface CustomBlockStateWrapper {
|
||||
|
||||
BlockStateWrapper visualBlockState();
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.momirealms.craftengine.core.item.modifier;
|
||||
|
||||
import net.momirealms.craftengine.core.block.BlockStateWrapper;
|
||||
import net.momirealms.craftengine.core.block.CustomBlockStateWrapper;
|
||||
import net.momirealms.craftengine.core.item.ComponentKeys;
|
||||
import net.momirealms.craftengine.core.item.Item;
|
||||
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
||||
@@ -12,6 +13,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
public class BlockStateModifier<I> implements SimpleNetworkItemDataModifier<I> {
|
||||
@@ -62,10 +64,14 @@ public class BlockStateModifier<I> implements SimpleNetworkItemDataModifier<I> {
|
||||
String stateString = arg.toString();
|
||||
return new BlockStateModifier<>(LazyReference.lazyReference(() -> {
|
||||
BlockStateWrapper blockState = CraftEngine.instance().blockManager().createBlockState(stateString);
|
||||
if (blockState instanceof CustomBlockStateWrapper customBlockStateWrapper) {
|
||||
blockState = customBlockStateWrapper.visualBlockState();
|
||||
}
|
||||
if (blockState != null) {
|
||||
Map<String, String> properties = new HashMap<>(4);
|
||||
for (String property : blockState.getPropertyNames()) {
|
||||
properties.put(property, blockState.getProperty(property));
|
||||
Object value = blockState.getProperty(property);
|
||||
properties.put(property, String.valueOf(value).toLowerCase(Locale.ROOT));
|
||||
}
|
||||
return properties;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx1G
|
||||
|
||||
# Project settings
|
||||
# Rule: [major update].[feature update].[bug fix]
|
||||
project_version=0.0.64.2
|
||||
project_version=0.0.64.3
|
||||
config_version=47
|
||||
lang_version=34
|
||||
project_group=net.momirealms
|
||||
|
||||
Reference in New Issue
Block a user