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.bukkit.util.BlockStateUtils;
|
||||||
import net.momirealms.craftengine.core.block.AbstractBlockStateWrapper;
|
import net.momirealms.craftengine.core.block.AbstractBlockStateWrapper;
|
||||||
import net.momirealms.craftengine.core.block.BlockStateWrapper;
|
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.ImmutableBlockState;
|
||||||
import net.momirealms.craftengine.core.block.properties.Property;
|
import net.momirealms.craftengine.core.block.properties.Property;
|
||||||
import net.momirealms.craftengine.core.util.Key;
|
import net.momirealms.craftengine.core.util.Key;
|
||||||
@@ -11,12 +12,22 @@ import java.util.Collection;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class BukkitCustomBlockStateWrapper extends AbstractBlockStateWrapper {
|
public class BukkitCustomBlockStateWrapper extends AbstractBlockStateWrapper implements CustomBlockStateWrapper {
|
||||||
|
|
||||||
public BukkitCustomBlockStateWrapper(Object blockState, int registryId) {
|
public BukkitCustomBlockStateWrapper(Object blockState, int registryId) {
|
||||||
super(blockState, registryId);
|
super(blockState, registryId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockStateWrapper visualBlockState() {
|
||||||
|
return getImmutableBlockState().map(ImmutableBlockState::vanillaBlockState).orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCustom() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Key ownerId() {
|
public Key ownerId() {
|
||||||
return getImmutableBlockState().map(state -> state.owner().value().id()).orElseGet(() -> BlockStateUtils.getBlockOwnerIdFromState(super.blockState));
|
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);
|
this.accessor = FastNMS.INSTANCE.createStatePropertyAccessor(blockState);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCustom() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Key ownerId() {
|
public Key ownerId() {
|
||||||
return BlockStateUtils.getBlockOwnerIdFromState(super.blockState);
|
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 FIREWORK_EXPLOSION = getComponentType(ComponentKeys.FIREWORK_EXPLOSION);
|
||||||
public static final Object BUNDLE_CONTENTS = getComponentType(ComponentKeys.BUNDLE_CONTENTS);
|
public static final Object BUNDLE_CONTENTS = getComponentType(ComponentKeys.BUNDLE_CONTENTS);
|
||||||
public static final Object CONTAINER = getComponentType(ComponentKeys.CONTAINER);
|
public static final Object CONTAINER = getComponentType(ComponentKeys.CONTAINER);
|
||||||
|
public static final Object BLOCK_STATE = getComponentType(ComponentKeys.BLOCK_STATE);
|
||||||
|
|
||||||
private ComponentTypes() {}
|
private ComponentTypes() {}
|
||||||
|
|
||||||
|
|||||||
@@ -612,11 +612,11 @@ public class ComponentItemFactory1_20_5 extends BukkitItemFactory<ComponentItemW
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Optional<Map<String, String>> blockState(ComponentItemWrapper item) {
|
protected Optional<Map<String, String>> blockState(ComponentItemWrapper item) {
|
||||||
return Optional.empty();
|
return item.getJavaComponent(ComponentTypes.BLOCK_STATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void blockState(ComponentItemWrapper item, Map<String, String> state) {
|
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
|
@Override
|
||||||
protected Optional<Trim> trim(LegacyItemWrapper item) {
|
protected Optional<Trim> trim(LegacyItemWrapper item) {
|
||||||
String material = item.getJavaTag("Trim", "material");
|
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.ItemStack;
|
||||||
import org.bukkit.inventory.PlayerInventory;
|
import org.bukkit.inventory.PlayerInventory;
|
||||||
import org.bukkit.persistence.PersistentDataType;
|
import org.bukkit.persistence.PersistentDataType;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.bukkit.plugin.messaging.PluginMessageListener;
|
import org.bukkit.plugin.messaging.PluginMessageListener;
|
||||||
import org.bukkit.util.RayTraceResult;
|
import org.bukkit.util.RayTraceResult;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
@@ -156,7 +157,8 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
|||||||
instance = this;
|
instance = this;
|
||||||
this.s2cGamePacketListeners = new ByteBufferPacketListenerHolder[PlayPacketIdHelper.count(PacketFlow.CLIENTBOUND)];
|
this.s2cGamePacketListeners = new ByteBufferPacketListenerHolder[PlayPacketIdHelper.count(PacketFlow.CLIENTBOUND)];
|
||||||
this.c2sGamePacketListeners = new ByteBufferPacketListenerHolder[PlayPacketIdHelper.count(PacketFlow.SERVERBOUND)];
|
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;
|
this.plugin = plugin;
|
||||||
// set up packet id
|
// set up packet id
|
||||||
this.packetIds = VersionHelper.isOrAbove1_20_5() ? new PacketIds1_20_5() : new PacketIds1_20();
|
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")),
|
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")),
|
HIGHER_TRIPWIRE("higher_tripwire", Set.of(BlockKeys.TRIPWIRE), (w) -> !(boolean) w.getProperty("attached")),
|
||||||
NOTE_BLOCK("note_block", Set.of(BlockKeys.NOTE_BLOCK), (w) -> true),
|
NOTE_BLOCK("note_block", Set.of(BlockKeys.NOTE_BLOCK), (w) -> true),
|
||||||
BROWN_MUSHROOM("brown_mushroom", Set.of(BlockKeys.BROWN_MUSHROOM_BLOCK), (w) -> true),
|
BROWN_MUSHROOM("brown_mushroom_block", Set.of(BlockKeys.BROWN_MUSHROOM_BLOCK), (w) -> true),
|
||||||
RED_MUSHROOM("red_mushroom", Set.of(BlockKeys.RED_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),
|
MUSHROOM_STEM("mushroom_stem", Set.of(BlockKeys.MUSHROOM_STEM), (w) -> true),
|
||||||
TRIPWIRE("tripwire", Set.of(BlockKeys.TRIPWIRE), (w) -> true),
|
TRIPWIRE("tripwire", Set.of(BlockKeys.TRIPWIRE), (w) -> true),
|
||||||
SUGAR_CANE("sugar_cane", Set.of(BlockKeys.SUGAR_CANE), (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();
|
String getAsString();
|
||||||
|
|
||||||
|
boolean isCustom();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
default int compareTo(@NotNull BlockStateWrapper o) {
|
default int compareTo(@NotNull BlockStateWrapper o) {
|
||||||
return Integer.compare(registryId(), o.registryId());
|
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;
|
package net.momirealms.craftengine.core.item.modifier;
|
||||||
|
|
||||||
import net.momirealms.craftengine.core.block.BlockStateWrapper;
|
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.ComponentKeys;
|
||||||
import net.momirealms.craftengine.core.item.Item;
|
import net.momirealms.craftengine.core.item.Item;
|
||||||
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
||||||
@@ -12,6 +13,7 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class BlockStateModifier<I> implements SimpleNetworkItemDataModifier<I> {
|
public class BlockStateModifier<I> implements SimpleNetworkItemDataModifier<I> {
|
||||||
@@ -62,10 +64,14 @@ public class BlockStateModifier<I> implements SimpleNetworkItemDataModifier<I> {
|
|||||||
String stateString = arg.toString();
|
String stateString = arg.toString();
|
||||||
return new BlockStateModifier<>(LazyReference.lazyReference(() -> {
|
return new BlockStateModifier<>(LazyReference.lazyReference(() -> {
|
||||||
BlockStateWrapper blockState = CraftEngine.instance().blockManager().createBlockState(stateString);
|
BlockStateWrapper blockState = CraftEngine.instance().blockManager().createBlockState(stateString);
|
||||||
|
if (blockState instanceof CustomBlockStateWrapper customBlockStateWrapper) {
|
||||||
|
blockState = customBlockStateWrapper.visualBlockState();
|
||||||
|
}
|
||||||
if (blockState != null) {
|
if (blockState != null) {
|
||||||
Map<String, String> properties = new HashMap<>(4);
|
Map<String, String> properties = new HashMap<>(4);
|
||||||
for (String property : blockState.getPropertyNames()) {
|
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;
|
return properties;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx1G
|
|||||||
|
|
||||||
# Project settings
|
# Project settings
|
||||||
# Rule: [major update].[feature update].[bug fix]
|
# Rule: [major update].[feature update].[bug fix]
|
||||||
project_version=0.0.64.2
|
project_version=0.0.64.3
|
||||||
config_version=47
|
config_version=47
|
||||||
lang_version=34
|
lang_version=34
|
||||||
project_group=net.momirealms
|
project_group=net.momirealms
|
||||||
|
|||||||
Reference in New Issue
Block a user