From 941f8d6f424ab22694661519b444e1cc50a88e8f Mon Sep 17 00:00:00 2001 From: Skye Date: Fri, 14 Feb 2025 01:32:33 +0900 Subject: [PATCH 1/2] Fix typo in HexPattern.CODEC --- .../java/at/petrak/hexcasting/api/casting/math/HexPattern.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/math/HexPattern.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/math/HexPattern.kt index 001cfdeab..283587c98 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/math/HexPattern.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/math/HexPattern.kt @@ -131,8 +131,8 @@ data class HexPattern(val startDir: HexDir, val angles: MutableList = @JvmField val CODEC: Codec = RecordCodecBuilder.create({instance -> instance.group( - Codec.STRING.fieldOf(TAG_START_DIR).forGetter(HexPattern::anglesSignature), - HexDir.CODEC.fieldOf(TAG_ANGLES).forGetter(HexPattern::startDir) + Codec.STRING.fieldOf(TAG_ANGLES).forGetter(HexPattern::anglesSignature), + HexDir.CODEC.fieldOf(TAG_START_DIR).forGetter(HexPattern::startDir) ).apply(instance, HexPattern::fromAngles) }) From 8b959aae1c56bb2539ec2f380e01b9559bfbaafd Mon Sep 17 00:00:00 2001 From: Skye Date: Fri, 14 Feb 2025 01:34:33 +0900 Subject: [PATCH 2/2] Make Ancient Cyphers datapackable --- .../common/items/magic/ItemAncientCypher.java | 3 +- .../loot/AddHexToAncientCypherFunc.java | 41 ++---------- .../common/loot/AncientCypherManager.java | 62 +++++++++++++++++++ .../hexcasting/lang/en_us.flatten.json5 | 2 +- .../data/hexcasting/loot_cyphers/ascend.json | 5 ++ .../data/hexcasting/loot_cyphers/beckon.json | 19 ++++++ .../hexcasting/loot_cyphers/blastoff.json | 7 +++ .../data/hexcasting/loot_cyphers/blink.json | 15 +++++ .../hexcasting/loot_cyphers/detonate.json | 6 ++ .../hexcasting/loot_cyphers/flight_zone.json | 5 ++ .../data/hexcasting/loot_cyphers/growth.json | 16 +++++ .../hexcasting/loot_cyphers/heat_wave.json | 12 ++++ .../hexcasting/loot_cyphers/illuminate.json | 12 ++++ .../data/hexcasting/loot_cyphers/kindle.json | 8 +++ .../data/hexcasting/loot_cyphers/lunge.json | 8 +++ .../data/hexcasting/loot_cyphers/radar.json | 14 +++++ .../data/hexcasting/loot_cyphers/shatter.json | 8 +++ .../hexcasting/loot_cyphers/shockwave.json | 11 ++++ .../hexcasting/loot_cyphers/sidestep.json | 13 ++++ .../hexcasting/loot_cyphers/wither_wave.json | 14 +++++ .../hexcasting/fabric/FabricHexInitializer.kt | 33 ++++++++++ .../hexcasting/forge/ForgeHexInitializer.java | 6 ++ 22 files changed, 282 insertions(+), 38 deletions(-) create mode 100644 Common/src/main/java/at/petrak/hexcasting/common/loot/AncientCypherManager.java create mode 100644 Common/src/main/resources/data/hexcasting/loot_cyphers/ascend.json create mode 100644 Common/src/main/resources/data/hexcasting/loot_cyphers/beckon.json create mode 100644 Common/src/main/resources/data/hexcasting/loot_cyphers/blastoff.json create mode 100644 Common/src/main/resources/data/hexcasting/loot_cyphers/blink.json create mode 100644 Common/src/main/resources/data/hexcasting/loot_cyphers/detonate.json create mode 100644 Common/src/main/resources/data/hexcasting/loot_cyphers/flight_zone.json create mode 100644 Common/src/main/resources/data/hexcasting/loot_cyphers/growth.json create mode 100644 Common/src/main/resources/data/hexcasting/loot_cyphers/heat_wave.json create mode 100644 Common/src/main/resources/data/hexcasting/loot_cyphers/illuminate.json create mode 100644 Common/src/main/resources/data/hexcasting/loot_cyphers/kindle.json create mode 100644 Common/src/main/resources/data/hexcasting/loot_cyphers/lunge.json create mode 100644 Common/src/main/resources/data/hexcasting/loot_cyphers/radar.json create mode 100644 Common/src/main/resources/data/hexcasting/loot_cyphers/shatter.json create mode 100644 Common/src/main/resources/data/hexcasting/loot_cyphers/shockwave.json create mode 100644 Common/src/main/resources/data/hexcasting/loot_cyphers/sidestep.json create mode 100644 Common/src/main/resources/data/hexcasting/loot_cyphers/wither_wave.json diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemAncientCypher.java b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemAncientCypher.java index 44568c1f8..7145609ec 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemAncientCypher.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemAncientCypher.java @@ -14,7 +14,6 @@ import java.util.List; public class ItemAncientCypher extends ItemCypher { - public static final String TAG_PATTERNS = "patterns"; public static final String TAG_HEX_NAME = "hex_name"; public ItemAncientCypher(Properties pProperties) { @@ -45,7 +44,7 @@ public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, List @@ -40,20 +33,18 @@ public AddHexToAncientCypherFunc(LootItemCondition[] lootItemConditions) { * This doesn't actually have any params so extract behaviour out for the benefit of forge */ public static ItemStack doStatic(ItemStack stack, RandomSource rand) { - var hex = LOOT_HEXES.get(rand.nextInt(LOOT_HEXES.size())); + var hex = AncientCypherManager.INSTANCE.randomHex(rand); var patsTag = new ListTag(); - for (var patString : hex.getSecond()){ - var pieces = patString.split(" "); - var pat = HexPattern.fromAngles(pieces[1],HexDir.fromString(pieces[0])); - patsTag.add(IotaType.serialize(new PatternIota(pat))); + for (var pat : hex.getSecond()){ + patsTag.add(IotaType.serialize(pat)); } var tag = new CompoundTag(); - tag.putString(ItemAncientCypher.TAG_HEX_NAME, hex.getFirst()); + tag.putString(ItemAncientCypher.TAG_HEX_NAME, "hexcasting.loot_hex." + hex.getFirst()); tag.putLong(ItemAncientCypher.TAG_MEDIA, 32*MediaConstants.SHARD_UNIT); tag.putLong(ItemAncientCypher.TAG_MAX_MEDIA, 32*MediaConstants.SHARD_UNIT); tag.putInt(VariantItem.TAG_VARIANT, rand.nextInt(8)); - tag.put(ItemAncientCypher.TAG_PATTERNS, patsTag); + tag.put(ItemPackagedHex.TAG_PROGRAM, patsTag); stack.getOrCreateTag().merge(tag); return stack; @@ -81,24 +72,4 @@ public AddHexToAncientCypherFunc deserialize(JsonObject object, JsonDeserializat return new AddHexToAncientCypherFunc(conditions); } } - - // TODO: make this datapackable - private static final List> LOOT_HEXES = List.of( - new Pair<>("hexcasting.loot_hex.shatter", new String[] {"NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST wqaawdd","EAST qaqqqqq"}), - new Pair<>("hexcasting.loot_hex.kindle", new String[] {"NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST wqaawdd","SOUTH_EAST aaqawawa"}), - new Pair<>("hexcasting.loot_hex.illuminate", new String[] {"NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST aadadaaw","EAST wqaawdd","NORTH_EAST ddqdd","EAST weddwaa","NORTH_EAST waaw","NORTH_EAST qqd"}), - new Pair<>("hexcasting.loot_hex.growth", new String[] {"NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST aadadaaw","EAST wqaawdd","NORTH_EAST ddqdd","EAST weddwaa","NORTH_EAST waaw","SOUTH_EAST aqaaedwd","EAST aadaadaa","NORTH_EAST wqaqwawqaqw","NORTH_EAST wqaqwawqaqw","NORTH_EAST wqaqwawqaqw"}), - new Pair<>("hexcasting.loot_hex.lunge", new String[] {"NORTH_EAST qaq","EAST aadaa","NORTH_EAST wa","SOUTH_EAST aqaawa","SOUTH_EAST waqaw","SOUTH_WEST awqqqwaqw"}), - new Pair<>("hexcasting.loot_hex.sidestep", new String[] {"NORTH_EAST qaq","EAST aadaa","NORTH_EAST wa","NORTH_WEST eqqq","SOUTH_EAST aqaawd","SOUTH_EAST e","NORTH_WEST qqqqqew","SOUTH_WEST eeeeeqw","SOUTH_EAST awdd","NORTH_EAST wdedw","SOUTH_WEST awqqqwaqw"}), - new Pair<>("hexcasting.loot_hex.ascend", new String[] {"NORTH_EAST qaq","SOUTH_EAST aqaae","WEST qqqqqawwawawd"}), - new Pair<>("hexcasting.loot_hex.blink", new String[] {"NORTH_EAST qaq","EAST aadaa","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST wqaawdd","NORTH_EAST qaq","EAST aa","NORTH_WEST wddw","NORTH_EAST wqaqw","SOUTH_EAST aqaaw","NORTH_WEST wddw","SOUTH_WEST awqqqwaq"}), - new Pair<>("hexcasting.loot_hex.blastoff", new String[] {"NORTH_EAST qaq","NORTH_WEST qqqqqew","SOUTH_EAST aqaawaa","SOUTH_EAST waqaw","SOUTH_WEST awqqqwaqw"}), - new Pair<>("hexcasting.loot_hex.radar", new String[] {"WEST qqq","EAST aadaa","EAST aa","SOUTH_EAST aqaawa","SOUTH_WEST ewdqdwe","NORTH_EAST de","EAST eee","NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaaeaqq","SOUTH_EAST qqqqqwdeddwd","NORTH_EAST dadad"}), - new Pair<>("hexcasting.loot_hex.beckon", new String[] {"NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST weaqa","EAST aadaa","EAST dd","NORTH_EAST qaq","EAST aa","EAST aawdd","NORTH_WEST wddw","EAST aadaa","NORTH_EAST wqaqw","NORTH_EAST wdedw","SOUTH_EAST aqaawa","SOUTH_EAST waqaw","SOUTH_WEST awqqqwaqw"}), - new Pair<>("hexcasting.loot_hex.detonate", new String[] {"NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaaedwd","EAST ddwddwdd"}), - new Pair<>("hexcasting.loot_hex.shockwave", new String[] {"NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaawaa","EAST aadaadaa","SOUTH_EAST aqawqadaq","SOUTH_EAST aqaaedwd","EAST aawaawaa","NORTH_EAST qqa","EAST qaqqqqq"}), - new Pair<>("hexcasting.loot_hex.heat_wave", new String[] {"WEST qqq","SOUTH_EAST aaqawawa","EAST eee","NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaae","SOUTH_EAST qqqqqwded","SOUTH_WEST aaqwqaa","SOUTH_EAST a","NORTH_EAST dadad"}), - new Pair<>("hexcasting.loot_hex.wither_wave", new String[] {"WEST qqq","SOUTH_EAST aqaae","SOUTH_EAST aqaaw","SOUTH_WEST qqqqqaewawawe","EAST eee","NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaae","SOUTH_EAST qqqqqwdeddwd","SOUTH_WEST aaqwqaa","SOUTH_EAST a","NORTH_EAST dadad"}), - new Pair<>("hexcasting.loot_hex.flight_zone", new String[] {"NORTH_EAST qaq","SOUTH_EAST aqaaq","SOUTH_WEST awawaawq"}) - ); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/loot/AncientCypherManager.java b/Common/src/main/java/at/petrak/hexcasting/common/loot/AncientCypherManager.java new file mode 100644 index 000000000..cbfbdb2cf --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/common/loot/AncientCypherManager.java @@ -0,0 +1,62 @@ +package at.petrak.hexcasting.common.loot; + +import at.petrak.hexcasting.api.HexAPI; +import at.petrak.hexcasting.api.casting.iota.Iota; +import at.petrak.hexcasting.api.casting.iota.PatternIota; +import at.petrak.hexcasting.api.casting.math.HexPattern; +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.mojang.datafixers.util.Pair; +import com.mojang.serialization.JsonOps; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener; +import net.minecraft.util.RandomSource; +import net.minecraft.util.profiling.ProfilerFiller; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class AncientCypherManager extends SimpleJsonResourceReloadListener { + public static final AncientCypherManager INSTANCE = new AncientCypherManager(); + + private Map> data; + + private AncientCypherManager() { + super(new Gson(), "loot_cyphers"); + } + + @Override + protected Map prepare(ResourceManager $$0, ProfilerFiller $$1) { + return super.prepare($$0, $$1); + } + + @Override + protected void apply(Map map, ResourceManager resourceManager, ProfilerFiller profilerFiller) { + Map> data = new HashMap<>(map.size()); + for (var entry : map.entrySet()) { + var key = entry.getKey(); + try { + var value = entry.getValue().getAsJsonArray(); + var iotaList = new ArrayList(value.size()); + for (var elem : value) { + var pattern = HexPattern.CODEC.parse(JsonOps.INSTANCE, elem).resultOrPartial(HexAPI.LOGGER::error).orElseThrow(); + iotaList.add(new PatternIota(pattern)); + } + data.put(key, iotaList); + } catch (Exception e) { + HexAPI.LOGGER.error("Error loading custom loot cypher {}: {}", key, e.getMessage()); + } + } + this.data = data; + } + + public Pair> randomHex(RandomSource rand) { + var map = this.data; + var entries = map.entrySet().stream().toList(); + var entry = entries.get(rand.nextInt(entries.size())); + return Pair.of(entry.getKey(), entry.getValue()); + } +} diff --git a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 index 86c043ce3..b2f0f6d3b 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 @@ -523,7 +523,7 @@ infinite_media: "Infinite", }, - loot_hex: { + "loot_hex.hexcasting:": { "shatter": "Shatter", "kindle": "Kindle", "illuminate": "Illuminate", diff --git a/Common/src/main/resources/data/hexcasting/loot_cyphers/ascend.json b/Common/src/main/resources/data/hexcasting/loot_cyphers/ascend.json new file mode 100644 index 000000000..9d358e4d8 --- /dev/null +++ b/Common/src/main/resources/data/hexcasting/loot_cyphers/ascend.json @@ -0,0 +1,5 @@ +[ + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "SOUTH_EAST", "angles": "aqaae" }, + { "start_dir": "WEST", "angles": "qqqqqawwawawd" } +] diff --git a/Common/src/main/resources/data/hexcasting/loot_cyphers/beckon.json b/Common/src/main/resources/data/hexcasting/loot_cyphers/beckon.json new file mode 100644 index 000000000..2fbdd5cda --- /dev/null +++ b/Common/src/main/resources/data/hexcasting/loot_cyphers/beckon.json @@ -0,0 +1,19 @@ +[ + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "EAST", "angles": "aa" }, + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "NORTH_EAST", "angles": "wa" }, + { "start_dir": "EAST", "angles": "weaqa" }, + { "start_dir": "EAST", "angles": "aadaa" }, + { "start_dir": "EAST", "angles": "dd" }, + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "EAST", "angles": "aa" }, + { "start_dir": "EAST", "angles": "aawdd" }, + { "start_dir": "NORTH_WEST", "angles": "wddw" }, + { "start_dir": "EAST", "angles": "aadaa" }, + { "start_dir": "NORTH_EAST", "angles": "wqaqw" }, + { "start_dir": "NORTH_EAST", "angles": "wdedw" }, + { "start_dir": "SOUTH_EAST", "angles": "aqaawa" }, + { "start_dir": "SOUTH_EAST", "angles": "waqaw" }, + { "start_dir": "SOUTH_WEST", "angles": "awqqqwaqw" } +] diff --git a/Common/src/main/resources/data/hexcasting/loot_cyphers/blastoff.json b/Common/src/main/resources/data/hexcasting/loot_cyphers/blastoff.json new file mode 100644 index 000000000..eca7dca6c --- /dev/null +++ b/Common/src/main/resources/data/hexcasting/loot_cyphers/blastoff.json @@ -0,0 +1,7 @@ +[ + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "NORTH_WEST", "angles": "qqqqqew" }, + { "start_dir": "SOUTH_EAST", "angles": "aqaawaa" }, + { "start_dir": "SOUTH_EAST", "angles": "waqaw" }, + { "start_dir": "SOUTH_WEST", "angles": "awqqqwaqw" } +] diff --git a/Common/src/main/resources/data/hexcasting/loot_cyphers/blink.json b/Common/src/main/resources/data/hexcasting/loot_cyphers/blink.json new file mode 100644 index 000000000..246527992 --- /dev/null +++ b/Common/src/main/resources/data/hexcasting/loot_cyphers/blink.json @@ -0,0 +1,15 @@ +[ + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "EAST", "angles": "aadaa" }, + { "start_dir": "EAST", "angles": "aa" }, + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "NORTH_EAST", "angles": "wa" }, + { "start_dir": "EAST", "angles": "wqaawdd" }, + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "EAST", "angles": "aa" }, + { "start_dir": "NORTH_WEST", "angles": "wddw" }, + { "start_dir": "NORTH_EAST", "angles": "wqaqw" }, + { "start_dir": "SOUTH_EAST", "angles": "aqaaw" }, + { "start_dir": "NORTH_WEST", "angles": "wddw" }, + { "start_dir": "SOUTH_WEST", "angles": "awqqqwaq" } +] diff --git a/Common/src/main/resources/data/hexcasting/loot_cyphers/detonate.json b/Common/src/main/resources/data/hexcasting/loot_cyphers/detonate.json new file mode 100644 index 000000000..63daefd74 --- /dev/null +++ b/Common/src/main/resources/data/hexcasting/loot_cyphers/detonate.json @@ -0,0 +1,6 @@ +[ + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "EAST", "angles": "aa" }, + { "start_dir": "SOUTH_EAST", "angles": "aqaaedwd" }, + { "start_dir": "EAST", "angles": "ddwddwdd" } +] diff --git a/Common/src/main/resources/data/hexcasting/loot_cyphers/flight_zone.json b/Common/src/main/resources/data/hexcasting/loot_cyphers/flight_zone.json new file mode 100644 index 000000000..5b70c8e5b --- /dev/null +++ b/Common/src/main/resources/data/hexcasting/loot_cyphers/flight_zone.json @@ -0,0 +1,5 @@ +[ + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "SOUTH_EAST", "angles": "aqaaq" }, + { "start_dir": "SOUTH_WEST", "angles": "awawaawq" } +] diff --git a/Common/src/main/resources/data/hexcasting/loot_cyphers/growth.json b/Common/src/main/resources/data/hexcasting/loot_cyphers/growth.json new file mode 100644 index 000000000..5d42a715d --- /dev/null +++ b/Common/src/main/resources/data/hexcasting/loot_cyphers/growth.json @@ -0,0 +1,16 @@ +[ + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "EAST", "angles": "aa" }, + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "NORTH_EAST", "angles": "wa" }, + { "start_dir": "EAST", "angles": "aadadaaw" }, + { "start_dir": "EAST", "angles": "wqaawdd" }, + { "start_dir": "NORTH_EAST", "angles": "ddqdd" }, + { "start_dir": "EAST", "angles": "weddwaa" }, + { "start_dir": "NORTH_EAST", "angles": "waaw" }, + { "start_dir": "SOUTH_EAST", "angles": "aqaaedwd" }, + { "start_dir": "EAST", "angles": "aadaadaa" }, + { "start_dir": "NORTH_EAST", "angles": "wqaqwawqaqw" }, + { "start_dir": "NORTH_EAST", "angles": "wqaqwawqaqw" }, + { "start_dir": "NORTH_EAST", "angles": "wqaqwawqaqw" } +] diff --git a/Common/src/main/resources/data/hexcasting/loot_cyphers/heat_wave.json b/Common/src/main/resources/data/hexcasting/loot_cyphers/heat_wave.json new file mode 100644 index 000000000..1067ec018 --- /dev/null +++ b/Common/src/main/resources/data/hexcasting/loot_cyphers/heat_wave.json @@ -0,0 +1,12 @@ +[ + { "start_dir": "WEST", "angles": "qqq" }, + { "start_dir": "SOUTH_EAST", "angles": "aaqawawa" }, + { "start_dir": "EAST", "angles": "eee" }, + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "EAST", "angles": "aa" }, + { "start_dir": "SOUTH_EAST", "angles": "aqaae" }, + { "start_dir": "SOUTH_EAST", "angles": "qqqqqwded" }, + { "start_dir": "SOUTH_WEST", "angles": "aaqwqaa" }, + { "start_dir": "SOUTH_EAST", "angles": "a" }, + { "start_dir": "NORTH_EAST", "angles": "dadad" } +] diff --git a/Common/src/main/resources/data/hexcasting/loot_cyphers/illuminate.json b/Common/src/main/resources/data/hexcasting/loot_cyphers/illuminate.json new file mode 100644 index 000000000..ab0651aee --- /dev/null +++ b/Common/src/main/resources/data/hexcasting/loot_cyphers/illuminate.json @@ -0,0 +1,12 @@ +[ + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "EAST", "angles": "aa" }, + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "NORTH_EAST", "angles": "wa" }, + { "start_dir": "EAST", "angles": "aadadaaw" }, + { "start_dir": "EAST", "angles": "wqaawdd" }, + { "start_dir": "NORTH_EAST", "angles": "ddqdd" }, + { "start_dir": "EAST", "angles": "weddwaa" }, + { "start_dir": "NORTH_EAST", "angles": "waaw" }, + { "start_dir": "NORTH_EAST", "angles": "qqd" } +] diff --git a/Common/src/main/resources/data/hexcasting/loot_cyphers/kindle.json b/Common/src/main/resources/data/hexcasting/loot_cyphers/kindle.json new file mode 100644 index 000000000..0a63afaa2 --- /dev/null +++ b/Common/src/main/resources/data/hexcasting/loot_cyphers/kindle.json @@ -0,0 +1,8 @@ +[ + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "EAST", "angles": "aa" }, + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "NORTH_EAST", "angles": "wa" }, + { "start_dir": "EAST", "angles": "wqaawdd" }, + { "start_dir": "SOUTH_EAST", "angles": "aaqawawa" } +] diff --git a/Common/src/main/resources/data/hexcasting/loot_cyphers/lunge.json b/Common/src/main/resources/data/hexcasting/loot_cyphers/lunge.json new file mode 100644 index 000000000..2505aeda0 --- /dev/null +++ b/Common/src/main/resources/data/hexcasting/loot_cyphers/lunge.json @@ -0,0 +1,8 @@ +[ + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "EAST", "angles": "aadaa" }, + { "start_dir": "NORTH_EAST", "angles": "wa" }, + { "start_dir": "SOUTH_EAST", "angles": "aqaawa" }, + { "start_dir": "SOUTH_EAST", "angles": "waqaw" }, + { "start_dir": "SOUTH_WEST", "angles": "awqqqwaqw" } +] diff --git a/Common/src/main/resources/data/hexcasting/loot_cyphers/radar.json b/Common/src/main/resources/data/hexcasting/loot_cyphers/radar.json new file mode 100644 index 000000000..2848e47b3 --- /dev/null +++ b/Common/src/main/resources/data/hexcasting/loot_cyphers/radar.json @@ -0,0 +1,14 @@ +[ + { "start_dir": "WEST", "angles": "qqq" }, + { "start_dir": "EAST", "angles": "aadaa" }, + { "start_dir": "EAST", "angles": "aa" }, + { "start_dir": "SOUTH_EAST", "angles": "aqaawa" }, + { "start_dir": "SOUTH_WEST", "angles": "ewdqdwe" }, + { "start_dir": "NORTH_EAST", "angles": "de" }, + { "start_dir": "EAST", "angles": "eee" }, + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "EAST", "angles": "aa" }, + { "start_dir": "SOUTH_EAST", "angles": "aqaaeaqq" }, + { "start_dir": "SOUTH_EAST", "angles": "qqqqqwdeddwd" }, + { "start_dir": "NORTH_EAST", "angles": "dadad" } +] diff --git a/Common/src/main/resources/data/hexcasting/loot_cyphers/shatter.json b/Common/src/main/resources/data/hexcasting/loot_cyphers/shatter.json new file mode 100644 index 000000000..42ca96586 --- /dev/null +++ b/Common/src/main/resources/data/hexcasting/loot_cyphers/shatter.json @@ -0,0 +1,8 @@ +[ + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "EAST", "angles": "aa" }, + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "NORTH_EAST", "angles": "wa" }, + { "start_dir": "EAST", "angles": "wqaawdd" }, + { "start_dir": "EAST", "angles": "qaqqqqq" } +] diff --git a/Common/src/main/resources/data/hexcasting/loot_cyphers/shockwave.json b/Common/src/main/resources/data/hexcasting/loot_cyphers/shockwave.json new file mode 100644 index 000000000..6fc4a50f5 --- /dev/null +++ b/Common/src/main/resources/data/hexcasting/loot_cyphers/shockwave.json @@ -0,0 +1,11 @@ +[ + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "EAST", "angles": "aa" }, + { "start_dir": "SOUTH_EAST", "angles": "aqaawaa" }, + { "start_dir": "EAST", "angles": "aadaadaa" }, + { "start_dir": "SOUTH_EAST", "angles": "aqawqadaq" }, + { "start_dir": "SOUTH_EAST", "angles": "aqaaedwd" }, + { "start_dir": "EAST", "angles": "aawaawaa" }, + { "start_dir": "NORTH_EAST", "angles": "qqa" }, + { "start_dir": "EAST", "angles": "qaqqqqq" } +] diff --git a/Common/src/main/resources/data/hexcasting/loot_cyphers/sidestep.json b/Common/src/main/resources/data/hexcasting/loot_cyphers/sidestep.json new file mode 100644 index 000000000..a56593d91 --- /dev/null +++ b/Common/src/main/resources/data/hexcasting/loot_cyphers/sidestep.json @@ -0,0 +1,13 @@ +[ + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "EAST", "angles": "aadaa" }, + { "start_dir": "NORTH_EAST", "angles": "wa" }, + { "start_dir": "NORTH_WEST", "angles": "eqqq" }, + { "start_dir": "SOUTH_EAST", "angles": "aqaawd" }, + { "start_dir": "SOUTH_EAST", "angles": "e" }, + { "start_dir": "NORTH_WEST", "angles": "qqqqqew" }, + { "start_dir": "SOUTH_WEST", "angles": "eeeeeqw" }, + { "start_dir": "SOUTH_EAST", "angles": "awdd" }, + { "start_dir": "NORTH_EAST", "angles": "wdedw" }, + { "start_dir": "SOUTH_WEST", "angles": "awqqqwaqw" } +] diff --git a/Common/src/main/resources/data/hexcasting/loot_cyphers/wither_wave.json b/Common/src/main/resources/data/hexcasting/loot_cyphers/wither_wave.json new file mode 100644 index 000000000..27a4fed13 --- /dev/null +++ b/Common/src/main/resources/data/hexcasting/loot_cyphers/wither_wave.json @@ -0,0 +1,14 @@ +[ + { "start_dir": "WEST", "angles": "qqq" }, + { "start_dir": "SOUTH_EAST", "angles": "aqaae" }, + { "start_dir": "SOUTH_EAST", "angles": "aqaaw" }, + { "start_dir": "SOUTH_WEST", "angles": "qqqqqaewawawe" }, + { "start_dir": "EAST", "angles": "eee" }, + { "start_dir": "NORTH_EAST", "angles": "qaq" }, + { "start_dir": "EAST", "angles": "aa" }, + { "start_dir": "SOUTH_EAST", "angles": "aqaae" }, + { "start_dir": "SOUTH_EAST", "angles": "qqqqqwdeddwd" }, + { "start_dir": "SOUTH_WEST", "angles": "aaqwqaa" }, + { "start_dir": "SOUTH_EAST", "angles": "a" }, + { "start_dir": "NORTH_EAST", "angles": "dadad" } +] diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt index 19e676136..b6c77abfb 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt @@ -13,6 +13,7 @@ import at.petrak.hexcasting.common.entities.HexEntities import at.petrak.hexcasting.common.items.ItemJewelerHammer import at.petrak.hexcasting.common.lib.* import at.petrak.hexcasting.common.lib.hex.* +import at.petrak.hexcasting.common.loot.AncientCypherManager import at.petrak.hexcasting.common.misc.AkashicTreeGrower import at.petrak.hexcasting.common.misc.BrainsweepingEvents import at.petrak.hexcasting.common.misc.PlayerPositionRecorder @@ -37,15 +38,24 @@ import net.fabricmc.fabric.api.event.player.UseEntityCallback import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents import net.fabricmc.fabric.api.loot.v2.LootTableEvents import net.fabricmc.fabric.api.registry.FlammableBlockRegistry +import net.fabricmc.fabric.api.resource.IdentifiableResourceReloadListener +import net.fabricmc.fabric.api.resource.ResourceManagerHelper import net.minecraft.commands.synchronization.SingletonArgumentInfo import net.minecraft.core.Registry import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.resources.ResourceLocation +import net.minecraft.server.packs.PackType +import net.minecraft.server.packs.resources.PreparableReloadListener.PreparationBarrier +import net.minecraft.server.packs.resources.ResourceManager +import net.minecraft.util.profiling.ProfilerFiller import net.minecraft.world.InteractionResult import net.minecraft.world.entity.player.Player import net.minecraft.world.level.block.state.properties.BlockSetType +import java.util.concurrent.CompletableFuture +import java.util.concurrent.Executor import java.util.function.BiConsumer + object FabricHexInitializer : ModInitializer { lateinit var CONFIG: FabricHexConfig @@ -112,6 +122,29 @@ object FabricHexInitializer : ModInitializer { HexBlocks.registerBlockCreativeTab(entries::accept, tab) HexItems.registerItemCreativeTab(entries, tab) } + + ResourceManagerHelper.get(PackType.SERVER_DATA).registerReloadListener(object : + IdentifiableResourceReloadListener { + override fun reload( + barrier: PreparationBarrier, + manager: ResourceManager, + preparationsProfiler: ProfilerFiller, + reloadProfiler: ProfilerFiller, + backgroundExecutor: Executor, + gameExecutor: Executor + ): CompletableFuture { + return AncientCypherManager.INSTANCE.reload( + barrier, + manager, + preparationsProfiler, + reloadProfiler, + backgroundExecutor, + gameExecutor + ) + } + + override fun getFabricId(): ResourceLocation = modLoc("loot_cyphers") + }) } private fun initRegistries() { diff --git a/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java b/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java index 39bd89658..622149cdb 100644 --- a/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java +++ b/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java @@ -13,6 +13,7 @@ import at.petrak.hexcasting.common.items.ItemJewelerHammer; import at.petrak.hexcasting.common.lib.*; import at.petrak.hexcasting.common.lib.hex.*; +import at.petrak.hexcasting.common.loot.AncientCypherManager; import at.petrak.hexcasting.common.misc.AkashicTreeGrower; import at.petrak.hexcasting.common.misc.BrainsweepingEvents; import at.petrak.hexcasting.common.misc.PlayerPositionRecorder; @@ -52,6 +53,7 @@ import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.ToolActions; import net.minecraftforge.common.crafting.CraftingHelper; +import net.minecraftforge.event.AddReloadListenerEvent; import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; import net.minecraftforge.event.RegisterCommandsEvent; import net.minecraftforge.event.TickEvent; @@ -199,6 +201,10 @@ private static void initListeners() { } }); + evBus.addListener((AddReloadListenerEvent evt) -> { + evt.addListener(AncientCypherManager.INSTANCE); + }); + evBus.register(CapClientCastingStack.class); evBus.addListener((PlayerInteractEvent.EntityInteract evt) -> {