9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2026-01-06 15:52:03 +00:00

旋转家具配置

This commit is contained in:
XiaoMoMi
2025-12-05 04:09:45 +08:00
parent b310559c0d
commit 37eaf97dc4
25 changed files with 171 additions and 71 deletions

View File

@@ -1,6 +1,5 @@
package net.momirealms.craftengine.core.entity.furniture;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSortedMap;
import net.momirealms.craftengine.core.entity.furniture.behavior.EmptyFurnitureBehavior;
import net.momirealms.craftengine.core.entity.furniture.behavior.FurnitureBehavior;

View File

@@ -39,6 +39,9 @@ public class LootConditions {
register(CommonConditions.EXPRESSION, new ExpressionCondition.FactoryImpl<>());
register(CommonConditions.IS_NULL, new IsNullCondition.FactoryImpl<>());
register(CommonConditions.HAND, new HandCondition.FactoryImpl<>());
register(CommonConditions.ON_COOLDOWN, new OnCooldownCondition.FactoryImpl<>());
register(CommonConditions.INVENTORY_HAS_ITEM, new InventoryHasItemCondition.FactoryImpl<>());
register(CommonConditions.MATCH_FURNITURE_VARIANT, new MatchFurnitureVariantCondition.FactoryImpl<>());
}
public static void register(Key key, ConditionFactory<LootContext> factory) {

View File

@@ -2,6 +2,7 @@ package net.momirealms.craftengine.core.pack;
import java.nio.file.Path;
import java.util.Map;
import java.util.Objects;
public class CachedConfigSection {
private final Pack pack;
@@ -10,10 +11,10 @@ public class CachedConfigSection {
private final Map<String, Object> config;
public CachedConfigSection(String prefix, Map<String, Object> config, Path filePath, Pack pack) {
this.config = config;
this.filePath = filePath;
this.pack = pack;
this.prefix = prefix;
this.config = Objects.requireNonNull(config);
this.filePath = Objects.requireNonNull(filePath);
this.pack = Objects.requireNonNull(pack);
this.prefix = Objects.requireNonNull(prefix);
}
public Map<String, Object> config() {

View File

@@ -29,13 +29,21 @@ public abstract class IdSectionConfigParser extends AbstractConfigParser {
continue;
}
Map<String, Object> config = castToMap(section, false);
String node = cached.prefix() + "." + key;
if ((boolean) config.getOrDefault("debug", false)) {
CraftEngine.instance().logger().info(GsonHelper.get().toJson(CraftEngine.instance().templateManager().applyTemplates(id, config)));
if (!ResourceConfigUtils.runCatching(
cached.filePath(),
node,
() -> CraftEngine.instance().logger().info(GsonHelper.get().toJson(CraftEngine.instance().templateManager().applyTemplates(id, config))),
() -> GsonHelper.get().toJson(section)
)) {
// 发生异常
continue;
}
}
if (!(boolean) config.getOrDefault("enable", true)) {
continue;
}
String node = cached.prefix() + "." + key;
ResourceConfigUtils.runCatching(
cached.filePath(),
node,

View File

@@ -15,6 +15,7 @@ public final class CommonConditions {
public static final Key MATCH_ENTITY = Key.of("craftengine:match_entity");
public static final Key MATCH_BLOCK = Key.of("craftengine:match_block");
public static final Key MATCH_BLOCK_PROPERTY = Key.from("craftengine:match_block_property");
public static final Key MATCH_FURNITURE_VARIANT = Key.from("craftengine:match_furniture_variant");
public static final Key TABLE_BONUS = Key.from("craftengine:table_bonus");
public static final Key SURVIVES_EXPLOSION = Key.from("craftengine:survives_explosion");
public static final Key RANDOM = Key.from("craftengine:random");

View File

@@ -1,16 +1,13 @@
package net.momirealms.craftengine.core.plugin.context.condition;
import net.momirealms.craftengine.core.entity.player.Player;
import net.momirealms.craftengine.core.item.Item;
import net.momirealms.craftengine.core.plugin.context.Condition;
import net.momirealms.craftengine.core.plugin.context.Context;
import net.momirealms.craftengine.core.plugin.context.number.NumberProvider;
import net.momirealms.craftengine.core.plugin.context.number.NumberProviders;
import net.momirealms.craftengine.core.plugin.context.parameter.DirectContextParameters;
import net.momirealms.craftengine.core.util.ItemUtils;
import net.momirealms.craftengine.core.util.Key;
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
import org.jetbrains.annotations.Nullable;
import java.util.Map;
import java.util.Optional;

View File

@@ -0,0 +1,39 @@
package net.momirealms.craftengine.core.plugin.context.condition;
import net.momirealms.craftengine.core.entity.furniture.Furniture;
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;
import net.momirealms.craftengine.core.util.Key;
import net.momirealms.craftengine.core.util.MiscUtils;
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
import java.util.*;
public class MatchFurnitureVariantCondition<CTX extends Context> implements Condition<CTX> {
private final Set<String> variants;
public MatchFurnitureVariantCondition(Collection<String> variants) {
this.variants = new HashSet<>(variants);
}
@Override
public Key type() {
return CommonConditions.MATCH_FURNITURE_VARIANT;
}
@Override
public boolean test(CTX ctx) {
Optional<Furniture> furniture = ctx.getOptionalParameter(DirectContextParameters.FURNITURE);
return furniture.filter(value -> this.variants.contains(value.getCurrentVariant().name())).isPresent();
}
public static class FactoryImpl<CTX extends Context> implements ConditionFactory<CTX> {
@Override
public Condition<CTX> create(Map<String, Object> arguments) {
List<String> variants = MiscUtils.getAsStringList(ResourceConfigUtils.get(arguments, "variant", "variants"));
return new MatchFurnitureVariantCondition<>(variants);
}
}
}

View File

@@ -41,6 +41,7 @@ public class EventConditions {
register(CommonConditions.HAND, new HandCondition.FactoryImpl<>());
register(CommonConditions.ON_COOLDOWN, new OnCooldownCondition.FactoryImpl<>());
register(CommonConditions.INVENTORY_HAS_ITEM, new InventoryHasItemCondition.FactoryImpl<>());
register(CommonConditions.MATCH_FURNITURE_VARIANT, new MatchFurnitureVariantCondition.FactoryImpl<>());
}
public static void register(Key key, ConditionFactory<Context> factory) {

View File

@@ -1,28 +1,18 @@
package net.momirealms.craftengine.core.plugin.context.function;
import net.momirealms.craftengine.core.entity.furniture.Furniture;
import net.momirealms.craftengine.core.entity.player.InteractionHand;
import net.momirealms.craftengine.core.entity.player.Player;
import net.momirealms.craftengine.core.item.Item;
import net.momirealms.craftengine.core.loot.LootTable;
import net.momirealms.craftengine.core.plugin.context.Condition;
import net.momirealms.craftengine.core.plugin.context.Context;
import net.momirealms.craftengine.core.plugin.context.ContextHolder;
import net.momirealms.craftengine.core.plugin.context.event.EventFunctions;
import net.momirealms.craftengine.core.plugin.context.number.NumberProvider;
import net.momirealms.craftengine.core.plugin.context.number.NumberProviders;
import net.momirealms.craftengine.core.plugin.context.parameter.DirectContextParameters;
import net.momirealms.craftengine.core.sound.SoundData;
import net.momirealms.craftengine.core.sound.SoundSource;
import net.momirealms.craftengine.core.util.Key;
import net.momirealms.craftengine.core.util.ResourceConfigUtils;
import net.momirealms.craftengine.core.world.World;
import net.momirealms.craftengine.core.world.WorldPosition;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
public class RotateFurnitureFunction<CTX extends Context> extends AbstractConditionalFunction<CTX> {
private final NumberProvider degree;
@@ -64,7 +54,7 @@ public class RotateFurnitureFunction<CTX extends Context> extends AbstractCondit
}
public NumberProvider degree() {
return degree;
return this.degree;
}
public static class FactoryImpl<CTX extends Context> extends AbstractFactory<CTX> {

View File

@@ -2,7 +2,6 @@ package net.momirealms.craftengine.core.plugin.entityculling;
import net.momirealms.craftengine.core.entity.player.Player;
import net.momirealms.craftengine.core.plugin.config.Config;
import net.momirealms.craftengine.core.util.Key;
import net.momirealms.craftengine.core.util.MiscUtils;
import net.momirealms.craftengine.core.world.ChunkPos;
import net.momirealms.craftengine.core.world.MutableVec3d;

View File

@@ -324,17 +324,20 @@ public final class ResourceConfigUtils {
}
}
public static void runCatching(Path configPath, String node, Runnable runnable, Supplier<String> config) {
public static boolean runCatching(Path configPath, String node, Runnable runnable, Supplier<String> config) {
try {
runnable.run();
return true;
} catch (LocalizedException e) {
printWarningRecursively(e, configPath, node);
return false;
} catch (Exception e) {
String message = "Unexpected error loading file " + configPath + " - '" + node + "'.";
if (config != null) {
message += " Configuration details: " + config.get();
}
CraftEngine.instance().logger().warn(message, e);
return false;
}
}

View File

@@ -2,7 +2,6 @@ package net.momirealms.craftengine.core.util.snbt;
import com.mojang.brigadier.StringReader;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
import com.mojang.serialization.DynamicOps;
import net.momirealms.craftengine.core.util.snbt.parse.*;
import net.momirealms.sparrow.nbt.util.UUIDUtil;

View File

@@ -4,7 +4,6 @@ import com.mojang.brigadier.ImmutableStringReader;
import com.mojang.brigadier.Message;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.brigadier.exceptions.DynamicCommandExceptionType;
import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
import java.util.function.Function;