mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2026-01-06 15:52:03 +00:00
旋转家具配置
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
@@ -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> {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user